IT

JavaFX는 WPF와 어떻게 다릅니 까?

lottoking 2020. 9. 14. 21:25
반응형

JavaFX는 WPF와 어떻게 다릅니 까? [닫은]


저는 대부분의 C # 프로그래머이며 10 년 전에 Java 작성을 중단했지만, Java 기술을 읽고 대화하는 등 Java 기술을 따라 잡으려고합니다.

JavaFX라는 새롭고 풍부한 GUI 프레임 워크에 대해 들었지만 비 Java보고와 비교하는 리소스를 수 없었습니다.

저는 C #과 WPF에 매우 익숙하기 때문에 두 기술이 얼마나 유사하거나 다른지 느끼고 싶습니다.

편집 : 답이 나오지 않기 때문에 좀 더 간략하게 설명하겠습니다.

  1. WPF는 XAML을 사용하여 사용하여 트리를 만듭니다. JavaFX는 어디에 있습니까?
  2. WPF는 MVVM 패턴의 뷰 모델에 바인딩하는 데 가장 적합합니다. JavaFX도 바인딩을 사용하게 사용됩니까?
  3. WPF는 사용을 위해 GPU를 사용하는데 JavaFX도 똑같이 작동합니까?
  4. Silverlight는 Net PC에서 브라우저를 사용 언어 때 JavaFX와 어떻게 비교 검증?

... 앞으로 더 ...

비교가 계속 업데이트 될 수 있도록 커뮤니티 위키로 변경하고 있습니다.


저는 지난 몇 주 동안 JavaFX를 배우고 있습니다. 내 눈에 WPF와 비교하는 방법에 대한 높은 수준의 개요입니다.

내 모든 의견은 JavaFX 2.0과 관련이 있습니다. 이 정보는 플랫폼이 아직 미성숙하고 활발하게 개발 중 변경 될 수 있습니다.

제도법

WPF와 마침 JavaFX는 유지 된 그래픽 시스템을 사용합니다. 사용자 인터페이스는 개념적으로 WPF와 동일한 생각할 수있는 '노드'로 구성된 장면 그래프로 구성 UIElement됩니다.

JavaFX는 사용 가능한 경우 그래픽 방식을 GPU로 오프로드합니다. 그래픽 시스템은 Windows에서는 DirectX를, 다른 플랫폼에서는 OpenGL을 사용합니다.

마크 업

JavaFX 사용자 인터페이스는 코드 및 FXML 마크 업을 통해 생성 할 수 있습니다. 이는 요소를 중첩하여 객체 그래프를 생성 할 수있는 점에서 XAML과 유사합니다.

FXML에는 속성 바인딩 (단순 식만 해당) 및 이벤트 처리기에 대한 바인딩 (모든 onEvent 메소드 ) 과 같은 XAML과 기능이 있습니다. 이벤트 가능성은 인라인으로 선언 할 이벤트에 바인딩합니다.

FXML 파일에는 많은 이벤트를 할 수 있습니다. 이것은 MVC 의미의 컨트롤러이며 WPF 세계의 viewModel과 동일하지 않습니다 (일반적으로 컨트롤러는 노드 및 컨트롤에 대한 참조를 가짐).

WPF의 한 가지 차이점은 FXML이 BAML과 같은 중간 이진 표현으로 되지 않는다는 것입니다. 아직 성능 문제를 발견하지 못했지만 시스템을 사용하게됩니다. 그러나 플랫폼이 여전히 코드 작성을 권장하고 스타일이 코드 선언되어 있으므로 FXML은 일반적으로 XAML보다 작성됩니다.

FXML에 대한 소개는 여기 에서 사용할 수 있습니다 .

씬 빌더는 무료로 제공되는 (비어처럼) UI를 직접 코딩하는 것이 마음에 들지 않는 경우 요소를 끌어 앤 드롭하고 속성을 설정하고 컨트롤러에서 코드에 바인딩하면 FXML이 자동으로 생성됩니다. 분명히 씬 빌더는 Expression Blend 강력 강력하지 않지만 Visual Studio에서 제공하는 '디자이너'보다 여전히 낫습니다.

제본

JavaFX는 매우 강력한 속성과 바인딩 시스템을 가지고 있습니다. Java Bean 패턴은 속성을 캡슐화하는 클래스를 포함하도록 확장 (WPF의 속성이 속성을 방식과 유사 함)합니다. 무효화 및 변경 알림을 제공하는 인터페이스를 구현합니다.

무효화 알림과 변경 알림은 차이가 있습니다. 무효화는 바인딩이 이제 유효하지 않을 다시 계산해야 함을 알려줍니다. get()또는 getValue()메서드 를 통해 속성 값을 요청할 때까지 재계 산은 실제로 발생하지 않습니다 . 그러나 변경된 경우 리스너를 등록한 경우 해당 속성에 바인딩 된 모든 항목이 변경 사항을 반영합니다.

JavaFX는 속성과 속성을 가져오고 설정합니다. 래퍼의 인스턴스를 반환하는 메서드 (WPF 속성과 같이 정적이 아님)를 사용하여 WPF와 방식으로 속성을 노출합니다.

여러 속성 복잡한 바인딩을 만들 수 있습니다 . 정수 속성이 다른 두 개의 합 (a = b + c)이되기를 원하십니까? 문제 없습니다. JavaFX는 대표적인 종류의 관계를 표현하는 Fluent API를 제공합니다. EG

A. 추가 (B, C);

B 또는 C의 값이 변경되면 알림이 발생하여 시스템이 A를 재평가해야 함을 알 수 있습니다. 이 경우 A 값이 다른 속성에 바인딩되어 있으므로이 경우에는 의미가 없기 때문에 값을 설정하려고합니다.

이러한 표현식은 상당히 복잡한 EG 일 a = (b + c) * (d - e)수 있으며 여러 속성을 포함 할 수 있습니다. 유창한 API는 읽고 사용하기가 쉽지만 일부 Microsoft 라이브러리에서 제공하는 Fluent API만큼 좋지는 않지만 JavaFX 자체보다는 Java 언어 제한에 더 가깝습니다.

동일한 유형의 속성간에 간단한 양방향 바인딩을 만들 수 있으므로 하나가 업데이트되면 다른 하나가 변경 사항을 자동으로 반영합니다.

JavaFX는 또한 API에서 제공하지 않는 사용자 정의 바인딩 표현식을 작성하거나 성능에 관심이있는 경우 직접 바인딩을 사용자 정의 할 수있는 저수준 API를 제공합니다.

JavaFX와 WPF의 가장 큰 차이점 중 하나는 바인딩이 태그에서 바인딩을 설정하는 WPF 방식과 비교하여 JavaFX의 코드에서 주로 수행된다는 것입니다.

속성 및 바인딩에 대한 소개는 여기 에서 찾을 수 있습니다 .

스타일

JavaFX는 CSS를 사용하여 장면 그래프에 포함 된 노드의 모양을 변경합니다. 각 노드 유형에 설정할 수있는 유형 및 속성을 설명하는 전체 사양을 사용할 수 있습니다.

JavaFX는 또한 EG에서 정의하고 사용할 수있는 변수와 같이 CSS를 개선하는 데 도움이되는 몇 가지 추가 기능을 제공합니다.

.button {
    my-custom-color: RGB(234, 44, 78);
}

.my-control {
    -fx-background-color: my-custom-color
}

또한 그라디언트와 같은 것을 만드는 데 유용한 이전에 정의 된 다른 색상에서 색상을 추출 할 수있는 몇 가지 기능을 제공합니다. 이는 기본 색상 팔레트를 정의 할 수 있고 나머지는이 값에서 생성 할 수 있음을 의미합니다 (기본 JavaFX CSS 파일이 수행하는 작업입니다).

JavaFX CSS에서는 노드에서 사용하는 레이아웃 유형 을 정의 할 수 없습니다 (이를 작성하는 현재 모든 레이아웃은 코드에서 수행되어야 함). 이것은 HTML과 함께 사용할 때 정말 고통스러운 CSS의 한 측면이기 때문에 저에게 정말 잘 작동합니다.

개인적으로 나는 내 취향에 비해 너무 장황한 경향이있는 XAML 스타일보다 CSS를 선호합니다.

JavaFX CSS에 대한 가이드는 여기 에서 찾을 수 있습니다 .

형세

JavaFX는 WPF에서 제공하는 것과 유사한 여러 레이아웃 창을 제공합니다. 내가 알아 차린 한 가지 차이점은 측정 및 레이아웃 계약이 Region클래스 의 상속 체인 위에 더 정의되어 있다는 것 입니다.

앞서 언급했듯이 레이아웃은 CSS를 사용하여 수행 할 수 없지만 코드, FXML을 사용하여 표현하거나 씬 빌더 (궁극적으로 FXML로 변환)를 사용하여 생성 할 수 있습니다.

통제 수단

JavaFX는 우리가 기대하는 제어 라이브러리를 계속해서 제공합니다. JavaFX와 WPF의 주요 차이점 중 하나는 컨트롤이 기본적으로 블랙 박스이며 WPF 컨트롤이 할 수있는 방식으로 다시 템플릿 할 수 없다는 것입니다. 또한 WPF 컨트롤보다 훨씬 적은 속성을 노출하는 것 같습니다.

컨트롤은 구현 특정 영역의 일부를 CSS에 노출하여 컨트롤의 특정 영역을 스타일로 대상으로 지정할 수 있습니다. 이것은 컨트롤 하위 구조알려져 있습니다. EG a CheckBox는 두 개의 하위 구조를 노출합니다. 컨트롤의 각 부분을 독립적으로 스타일링 할 수 있도록하는 상자와 확인 표시. 앞서 설명한 것처럼 컨트롤 모양CSS를 사용하여 변경할 수 있지만 느낌변경할 수 없습니다. TabPane를 들어, WPF에서 할 수있는 방식으로 내부 레이아웃 패널을 변경하여 콘텐츠를 레이아웃 하는 방식을 크게 변경할 수 없습니다 TabControl.

이것은 상당히 제한적으로 들리지만 JavaFX에서 사용자 지정 컨트롤을 만드는 데 선호되는 방법은 레이아웃 패널에서 파생 된 라인을 따라 구성을 사용하여 표준 컨트롤을 배치하고 CSS를 사용하여 스타일을 다시 지정하는 것 같습니다.

결론

전반적으로 저는 JavaFX가 현재 제공하는 것에 매우 감동했습니다. WPF만큼 성숙하지는 않지만 활발하게 개발되고 있으며 Oracle은 확실히이를 뒷받침하는 것 같습니다. 시간이 성공 여부를 알려줄 것입니다.

JavaFX를 사용해 보는 것이 좋습니다. 설명서를 읽고 작은 응용 프로그램을 구성하고 생각을 확인하십시오.

또한 개발 팀의 정보로 정기적으로 업데이트되는 FXExperience.com확인해야합니다 .


JavaFX에 대한 느낌을 얻는 가장 좋은 방법은 사용해 보는 것입니다. JavaFX 웹 사이트에는 몇 가지 좋은 자습서가 있습니다. 다음은 몇 가지입니다.

그들은 꽤 빠르며 언어에 대한 좋은 느낌을줍니다. 더 많은 튜토리얼과 기사에 관심이 있다면 JavaFX 사이트 에 다른 많은 정보가 있습니다 .

질문에 대한 구체적인 답변 :

  1. JavaFX에는 xml 파생물이 아닌 "시각적 트리"를 생성하기위한 자체 선언 언어가 있습니다. UI는 장면 그래프를 기반으로하므로 그래프의 모든 노드에 다양한 효과와 애니메이션을 적용 할 수 있습니다. 자세한 정보는 튜토리얼을 참조하십시오. JavaFX 용 디자이너 도구도 있습니다 (아직 시도하지 않았습니다).
  2. JavaFX에는 언어에 바인딩이 내장되어 있습니다 .
  3. 데스크탑의 JavaFX는 GPU 렌더링을 사용하는 Java AWT / Swing을 사용합니다. Java의 모든 버전은 더 많은 그래픽을 GPU로 오프로드하는 것 같습니다. Sun의 Chris Campbell은 GPU 가속 에 대해 블로그에 올렸습니다 . JavaFX의 모바일 버전에 GPU 가속 기능이 있는지 잘 모르겠습니다. 이전 버전의 JavaFX가 필요한 성능을 충분히 발휘하지 못했지만 최신 버전이 이전 버전에 비해 성능이 크게 향상되었으며 여전히 속도를 높이기 위해 노력하고 있습니다.
  4. JavaFx는 Java 애플릿을 사용하여 브라우저에서 실행됩니다. Java 6 업데이트 10부터 Java 애플릿 프레임 워크가 재 작업되었으며 Adobe Flash만큼 매끄럽지는 않지만 훨씬 개선되었습니다. Silverlight가 Linux에서 작동하도록하는 데 문제가 있었지만 Linux에서 JavaFX가 작동하도록하는 것 외에는 Silverlight와 어떻게 비교되는지 잘 모르겠습니다.

여기 또 다른 관련 질문이 있습니다.

참고 URL : https://stackoverflow.com/questions/2016470/how-does-javafx-compare-to-wpf

반응형