programing

JavaFX와 WPF는 어떻게 비교됩니까?

oldcodes 2023. 4. 19. 23:28
반응형

JavaFX와 WPF는 어떻게 비교됩니까?

저는 주로 C#프로그래머입니다.Java를 쓰는 것은 10년 정도 전에 그만뒀습니다만, 기사를 읽거나 친구와 이야기를 하거나 하는 등, Java의 테크놀로지를 따라잡으려고 하고 있습니다.

JavaFX라는 새로운 리치 GUI 프레임워크에 대해 들어봤지만, Java 이외의 병렬과 비교할 수 있는 리소스를 찾을 수 없었습니다.

저는 C#과 WPF에 대해 잘 알고 있기 때문에 두 기술이 얼마나 비슷하거나 다른지 알고 싶습니다.

EDIT: 답변이 오지 않는 것을 고려하여 좀 더 구체적으로 설명하겠습니다.

  1. WPF는 XAML을 사용하여 비주얼 트리를 만듭니다.JavaFX에는 비슷한 기능이 있습니까?
  2. WPF는 MVVM 패턴의 뷰 모델에 바인딩하는 데 가장 적합합니다. JavaFX도 바인딩을 광범위하게 사용합니까?
  3. WPF는 GPU를 렌더링에 활용합니다.JavaFX도 마찬가지입니까?
  4. Silverlight와 JavaFX는 넷 PC의 브라우저를 통해 실행할 때 어떻게 비교됩니까?

...앞으로 더...

비교를 계속 갱신할 수 있도록 커뮤니티 Wiki로 변경합니다.

저는 지난 몇 주 동안 JavaFX를 배우고 있습니다.다음은 WPF와 비교한 대략적인 개요입니다.

제 코멘트는 모두 JavaFX 2.0에 관한 것입니다.플랫폼이 아직 상당히 미숙하고 활발하게 개발되고 있기 때문에 이 정보는 변경될 수 있습니다.

그래픽스

WPF와 마찬가지로 JavaFX는 유지된 그래픽 렌더링 시스템을 사용합니다.WPF와 한 것으로 될 수 있는 '는 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는 이러한 속성을 Get and set 속성 및 속성 래퍼의 인스턴스(WPF 속성처럼 스태틱하지 않음)를 반환하는 메서드를 사용하여 WPF와 유사한 방법으로 공개합니다.

여러 속성 에 복잡한 바인딩을 생성할 수 있습니다.정수 속성을 다른 두 개의 합(a = b + c)으로 설정하시겠습니까?문제 없습니다. JavaFX는 Fluent API를 제공하여 이러한 관계를 표현합니다.

A. 추가(B, C);

B 또는 C의 값이 변경되면 시스템이 A를 재평가해야 한다는 것을 알 수 있도록 적절한 통지가 발생합니다.이 경우 A 값이 다른 속성에 바인딩되어 있으므로 A 값을 설정하려고 하면 예외가 발생하므로 이 컨텍스트에서는 의미가 없습니다.

은 상당히 E일 수 .a = (b + c) * (d - e)을 사용법Fluent API는 읽기 쉽고 사용하기 쉽지만 일부 Microsoft 라이브러리에서 제공되는 Fluent API만큼 좋지는 않지만 JavaFX 자체보다는 Java 언어 제한에 기인합니다.

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

또한 JavaFX는 API에 의해 제공되지 않는 커스텀바인딩 식을 작성하거나 퍼포먼스에 관심이 있는 경우 바인딩을 커스터마이즈할 수 있는 낮은 수준의 API를 제공합니다.

JavaFX와 WPF의 가장 큰 차이점 중 하나는 바인딩이 주로 JavaFX에서 코드로 실행된다는 것과 WPF에서 마크업으로 바인딩을 확립하는 방법이 다르다는 것입니다.

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

스타일

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

JavaFX는 CSS 개선에 도움이 되는 변수(예: E.G.의 다른 곳에서 정의 및 사용할 수 있는 변수)도 제공합니다.

.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에 노출하므로 컨트롤의 특정 영역을 사용자의 스타일에 따라 타깃으로 지정할 수 있습니다.이를 컨트롤의 서브구조라고 합니다.예: a.CheckBox에는 2개의 서브구조(박스와 체크마크)가 표시되어 컨트롤의 각 부분을 개별적으로 스타일링할 수 있습니다.앞에서 설명한 바와 같이 CSS를 사용하여 컨트롤 모양만 변경할 수 있지만 느낌은 변경할 수 없습니다.예를 들어, 당신은 그 방법을 극적으로 바꿀 수 없습니다.TabPane 패널을 WPF 와 함께 할 수 .TabControl.

이것은 상당히 제한적으로 들리지만 JavaFX에서 커스텀 컨트롤을 작성하는 방법은 레이아웃 패널에서 파생된 컴포지션을 사용하여 표준 컨트롤을 배치하고 CSS를 사용하여 스타일을 변경하는 것입니다.

결론

전체적으로 저는 JavaFX가 현재 제공하고 있는 것에 매우 감명을 받았습니다.WPF만큼 성숙하지는 않지만 적극적으로 개발되고 있으며 Oracle이 이를 지원하고 있는 것 같습니다.성공 여부는 시간이 지나면 알 수 있다.

JavaFX를 사용해 보는 것을 추천합니다.매뉴얼을 읽고 작은 어플리케이션을 조립해보고 어떻게 생각하는지 확인해보세요.

또한 개발팀의 정보로 정기적으로 업데이트되는 FXExperience.com도 확인하십시오.

JavaFX의 느낌을 얻는 가장 좋은 방법은 그냥 시험해 보는 것이라고 생각합니다.JavaFX 웹사이트에는 몇 가지 유용한 튜토리얼이 있습니다.몇 가지 예를 들어보겠습니다.

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

질문에 대한 구체적인 답변은 다음과 같습니다.

  1. JavaFX에는 xml 파생형이 아닌 "visual tree"를 만들기 위한 자체 선언 언어가 있습니다.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 플래시만큼 매끄러운 것은 아니지만 크게 개선되었습니다.Silverlight와 비교했을 때 Linux에서 Silverlight를 작동시키는 데 어려움을 겪었지만 Linux에서 JavaFX를 작동시킨 것 외에는 잘 모르겠습니다.

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

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

반응형