2012-12-20 44 views
4

回到過去,我有不止一次實現的屬性和偵聽器,類似於JavaFX提供的。因爲我總是更喜歡使用廣泛支持的軟件包,而不是我自己發明的東西,所以我很想在下一個項目中使用JavaFX屬性,但在此之前,我希望得到以下問題的答案。我應該在非gui應用程序邏輯中使用比javafx.beans.property提供的機制更多的東西嗎?

在與GUI無關的軟件中,爲了監視和控制系統狀態而受益於更改監聽器,我還應該選擇JavaFX提供的屬性機制,還是有其他可用的工具可用我? ...還是我仍然需要自己實施這個機制?

問候, 弗雷德裏克

回答

1

JavaFX的財產機制應該工作。它們是爲了支持JavaFX GUI而編寫的,但對於非GUI邏輯應該也能正常工作 - 儘管我認爲到目前爲止還沒有廣泛使用這種用途。我無法與其他競爭性框架談論哪些可以更好地滿足您的需求。


當你看到的類中的JavaFX屬性的支持數,它可以是一個有點嚇人,但他們往往掛起來相當好,很多類的存在屏蔽對象/原始的阻抗失配。對於這些功能沒有更好的語言支持是令人遺憾的。使用IDE和自動完成編程非常有效,因此您不需要輸入太多。監聽器可以摺疊成jdk8 lambda表達式,這樣它們就可以非常簡潔了。

綁定和監聽器框架是允許JavaFX控件很容易調整和使用的一部分 - 它們爲系統的每個項目提供更改通知的掛鉤。

JavaDoc可用。不幸的是,關於bindingscollections的官方文檔並沒有完全描述如何使用它的功能集。有一篇關於使用JavaFX properties with POJOs的有用文章。

JavaFX的bean,綁定和屬性支持的源尚未公開(儘管它計劃在未來幾個月內公開)。


稍後使用的Java版本比jdk7u6並確保從分佈jfxrt.jar文件是在classpath中,讓你拿起JavaFX類。如果您不使用任何GUI組件,則不需要在程序中擴展JavaFX Application類。


相關非GUI包要考慮的是:

javafx.beans包javafx.beans包含定義可觀測的最普通形式的接口。綁定

javafx.beans.property

javafx.beans.binding特性的包javafx.beans.property定義只讀屬性和可寫的屬性,再加上許多實施方式。

javafx.beans.property.adapter(使標準pojo bean適應JavaFX屬性)。

javafx.beans.value包javafx.beans.value包含兩個基本接口ObservableValue和WritableValue及其所有子接口。

javafx.animation提供基於易用性轉換的動畫(與時間相關的非gui部分)的類集合。

javafx.collections含有人體必需的JavaFX的集合和集合公用事業

javafx.util.converter這個包是標準的字符串轉換爲JavaFX。

2

在商業產品上使用JavaFX屬性非UI相關的邏輯大約一年後,這裏是我的兩分錢:

它可能不是混合UI相關的屬性和業務邏輯是個好主意相關的屬性。

如果兩種都不需要互相交互,它會很好用。但是,當您開始將UI元素綁定到業務邏輯屬性時會出現問題。原因是你會經常在專用線程中運行busness邏輯代碼,並且如果此線程更新屬於某個綁定的屬性,則會發生以下異常:

java.lang.IllegalStateException:Not在FX應用程序線程上;然後

最簡單的解決方法是把代碼塊改變在

Platform.runLater(...)

調用屬性值...但你在業務邏輯代碼中有一些依賴於javaFX框架的代碼。所以,如果你在一個Swing應用程序重新使用這些代碼或只是如果你想與JUnit測試來測試它,你會得到錯誤有太多:

java.lang.IllegalStateException:工具包未初始化

由於您正在使用需要初始化JavaFX工具包的Platform.runLater(),因此在單元測試或swing/javaee應用程序中並非如此。

要結束,可以使用非UI代碼的javafx屬性,但它可能有非平凡的副作用...

相關問題