JavaFX技巧5:可观察
即使在整個NSA監(jiān)視的這段時間,實現(xiàn)JavaFX控件時也要牢記可觀察性,這仍然是一個好主意。 與Swing相比,這在JavaFX中很容易實現(xiàn)。
舊時光
來自Swing,我習慣于花費大量精力和時間來使自定義控件變得可觀察。 通常需要添加方法來添加和刪除某種類型的偵聽器。 此偵聽器類型是一個新接口,該接口的單個??方法接受了一個新的事件對象。 要發(fā)送此事件對象,控件必須在我的自定義控件中“觸發(fā)”它,因此我最終編寫了fireXYZ()方法。 要做很多工作只是為了讓別人知道控件狀態(tài)的某些方面已經(jīng)改變。
新時代
在JavaFX中,通過使用屬性和可觀察的集合可以更輕松地實現(xiàn)可觀察性。 在FlexGanttFX框架中,其控件的幾乎每個屬性都是屬性,并且所有集合都是通過FXCollections類創(chuàng)建的,該類返回可觀察的集合。 這很有意義,因為每個控件的屬性總數(shù)定義了它的狀態(tài),并且該狀態(tài)必須是可觀察的,以便應用程序的其他部分(尤其是其他控件)可以對狀態(tài)更改做出反應。
樣板代碼
使用屬性的不利之處在于,您最終編寫了許多樣板代碼,但仍然比Swing少。 如果是布爾型屬性,它將如下所示:
public final BooleanProperty showStuff =new SimpleBooleanProperty(this, "showStuff", true);public final BooleanProperty showStuffProperty() {return showStuff; }public final boolean isShowStuff() {return showStuff.get(); }public final void setShowStuff(boolean show) {showStuff.set(show); }是的,您應該完全遵循此編碼約定。 對于名為xxx的屬性,請?zhí)峁┟麨閤xxProperty()的屬性訪問器方法,名為setXXX()的設置器和名為getXXX()的獲取器。 這是在JavaFX中使用它的方式,您應該堅持使用它。
使用集合時,通常至少會得到以下代碼:
private final ObservableList<String> names =FXCollections.observableArrayList();public final ObservableList<String> getNames() {return names; }在JavaFX核心控件中,集合通常存儲在一個屬性中,以便可以用新集合替換整個集合。 到目前為止,我在控件中還沒有真正看到對此的強烈要求,也沒有這樣做,這意味著我不必為此情況編寫屬性偵聽器。
聽眾
現(xiàn)在,我們的控件屬性是屬性,我們可以通過向它們添加偵聽器(使用lambda表達式)來輕松地對狀態(tài)更改做出反應。
myControl.showStuffProperty().addListener(it -> showStuffChanged());myControl.getNames().addListener((Observable observable) -> namesChanged());結論
在設計自己的自定義控件時,通過屬性和可觀察的集合在控件類中公開其狀態(tài)。 這樣,每個人都將能夠以與整個JavaFX框架一致的方式觀察控件的狀態(tài),并使其他開發(fā)人員能夠無縫地將其控件/應用程序與您的控件集成在一起。
翻譯自: https://www.javacodegeeks.com/2014/07/javafx-tip-5-be-observable.html
總結
以上是生活随笔為你收集整理的JavaFX技巧5:可观察的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生成器设计模式的应用
- 下一篇: 云服务器大流量ddos攻击(云服务器大流