2012-12-20 5 views
4

이전에는 JavaFX에서 제공하는 것과 비슷한 속성과 리스너가 두 번 이상 구현되었습니다.javafx.beans.property가 제공하는 메커니즘 이외의 다른 GUI 로직에서 사용해야합니까?

필자가 직접 발명 한 것보다 널리 지원되는 패키지를 선호하기 때문에 다음 프로젝트에서 JavaFX 속성을 사용하고 싶지만 그 전에는 다음 질문에 대한 답변을 얻고 싶습니다.

GUI와 관련이 없지만 시스템 상태를 모니터링하고 제어하기 위해 변경 리스너가 도움이되는 소프트웨어에서 JavaFX가 제공하는 속성 메커니즘을 선택해야합니까 아니면 다른 방법으로 사용할 수 있습니까? 나를? ... 아니면 나 자신이이 메커니즘을 구현할 필요가 있습니까?

감사합니다, 프레드릭

답변

1

자바 FX 속성 메커니즘이 작동합니다. 그것들은 JavaFX GUI를 지원하기 위해 작성되었지만 비 GUI 로직에도 잘 작동해야합니다. 그러나 지금까지 그 목적을 위해 널리 사용되지는 않았다고 생각합니다. 나는 귀하의 필요를 더 잘 충족시킬 수있는 다른 경쟁 체제에 관해서는 말할 수 없습니다.


당신은 자바 FX의 속성 지원 클래스의 수를 볼

, 그것은 조금 어려운 될 수 있지만, 그들은 함께 아주 잘 걸어 경향이 클래스의 많은 객체/원시 임피던스 불일치를 보호하기 위해 존재한다. 그러한 기능을 더 잘 지원하지 않는 것은 부끄러운 일입니다. IDE 및 자동 완성 기능을 사용하여 프로그래밍하면 꽤 잘 작동하므로 입력 할 필요가 없습니다. 청취자는 jdk8 람다 식으로 접어서 매우 간결하게 마무리 할 수 ​​있습니다.

바인딩 및 수신기 프레임 워크는 JavaFX 컨트롤을 쉽게 적용하고 활용할 수있는 기능의 일부로 시스템의 모든 항목에 대한 변경 알림을 제공합니다.

JavaDoc을 사용할 수 있습니다. 불행하게도 bindingscollections의 공식 문서는 기능 정의를 사용하는 방법을 철저하게 설명하는 라이브러리 정의를하지 않습니다. JavaFX properties with POJOs 사용에 대한 유용한 문서가 있습니다.

JavaFX에 대한 bean, 바인딩 및 속성 지원 소스는 아직 공개되지 않았습니다 (앞으로 몇 개월 동안 공개 예정).


는 jdk7u6 이후에 자바의 버전을 사용하고 자바 FX 클래스를 선택할 수 있도록 분포에서 jfxrt.jar 파일이 클래스 경로에 있는지 확인하십시오. GUI 구성 요소를 사용하지 않는 경우 프로그램에서 JavaFX Application 클래스를 확장 할 필요가 없습니다. 고려해야 할


관련 비 GUI 패키지는 다음과 같습니다

javafx.beans 패키지 javafx.beans이 관찰의 가장 일반적인 형태를 정의하는 인터페이스가 포함되어 있습니다. 바인딩

javafx.beans.property

javafx.beans.binding 특성 패키지 javafx.beans.property 정의 읽기 전용 속성 쓸 특성 플러스 구현물.

javafx.beans.property.adapter (JavaFX 속성에 표준 pojo beans 적용)

javafx.beans.value 패키지 javafx.beans.value에는 ObservableValue 및 WritableValue의 두 기본 인터페이스와 모든 하위 인터페이스가 포함되어 있습니다.

javafx.animation 사용이 간편한 전환 기반 애니메이션 (타이밍 관련 비 GUI 부분)을위한 클래스 세트를 제공합니다.

javafx.collections

javafx.util.converter이 패키지는 자바 FX의 표준 문자열 컨버터를위한 필수 자바 FX 컬렉션 및 수집 유틸리티가 포함되어 있습니다.

UI 관련 특성과 비즈니스 로직을 혼합하는 좋은 생각하지 않을 수

2

상용 제품에 대한 년 동안 비 UI 관련 로직 자바 FX 속성을 사용한 후, 여기 내 두 센트 관련 속성.

두 종류가 서로 상호 작용할 필요가없는 경우 효과적입니다. 하지만 UI 요소를 비즈니스 로직 속성에 바인딩하기 시작할 때 문제가 발생합니다.

java.lang.IllegalStateException : 그 이유는 자주 전용 스레드에서 실행 busness 로직 코드가되며,이 스레드가 바인딩의 일부 속성을 업데이트하는 경우, 당신은 다음과 같은 예외를 얻을 것입니다하지 않음 FX 응용 프로그램 스레드에서;

쉬운 수정 후

Platform.runLater (...)

호출에서 속성 값을 변경하는 코드 블록을 이동하는 것입니다 ...하지만 당신을 비즈니스 로직 코드에 javaFX 프레임 워크 종속 코드가 있습니다. 따라서이 경우 스윙 응용 프로그램에서이 코드를 다시 사용하거나 JUnit 테스트로 테스트하려는 경우 간단하게, 당신도이 오류를 얻을 것이다 :

java.lang.IllegalStateException : 초기화 툴킷하지

JavaFX 툴킷을 초기화해야하는 Platform.runLater()를 사용하고 있기 때문에 단위 테스트 나 스윙/javaee 응용 프로그램에서는 그렇지 않습니다.

끝내려면 javafx 속성을 비 UI 코드에 사용할 수 있지만 부작용이있을 수 있습니다.