使用 JavaFX 構建 Reactive 系統
JavaFX 是Java中用來構建圖形應用程式的新的標準庫, 但許多程式設計師仍然堅持在使用Swing甚至AWT(額滴個神啊)。關於如何利用JavaFX工具集中的新的超棒特性來構建響應式的快速應用程式,這裡有一些建議!
1. 屬性值
如果你對JavaFX元件做過完整的瞭解,移動遇到過屬性(Property)這個東西。FX庫中幾乎每個值都可以被觀察,分割槽(divider)的寬度,圖片的尺寸,文字標識(label)中的文字,一個列表中的子項以及核取方塊(checkbox)的狀態。屬性分成另類:可寫屬性和可讀屬性。可寫值可以被修改,使用設定器方法或者直接修改。 JavaFX 會處理事件處置過程並確保每個依賴於此屬性的元件都會被通知到。可讀屬性擁有能讓你在其值被修改時接收到通知的方法。
示例:
// 可讀-且可寫 StringProperty name = new SimpleStringProperty("Emil"); // 只讀 ObservableBooleanValue nameIsEmpty = name.isEmpty();
2. 繫結值
當你擁有一個可寫和可讀值的時候,你可以開始就這些值如何關聯定義規則。一個可寫屬性可以被繫結到一個可讀屬性,如此其值總是會匹配到可讀的這個。繫結並不會立即發生,不過它們會在值被觀察之前進行(看看我在那裡做的就明白了)。 繫結可以是單向或者雙向的。當然,如果它們之間是雙向的,就需要兩個屬性都是可寫的。
示例:
TextField fieldA = new TextField(); TextField fieldB = new TextField(); fieldA.prefWidthProperty().bind(fieldB.widthProperty());
3. 可觀察的列表
屬性並不是唯一可以被觀察的東西。如果列表是被封裝到了一個 ObservableList 中,那麼列表的成員同樣也是可以被觀察到的。ObservableList 的響應模型是相當先進的。你不僅能在列表被修改時收到通知,也可以看到列表具體是如何被修改的。
示例:
List<String> otherList = Arrays.asList("foo", "bar", "bar"); ObservableList<String> list = FXCollections.observableList(otherList); list.addListener((ListChangeListener.Change<? extends String> change) -> { System.out.println("Received event."); while (change.next()) { if (change.wasAdded()) { System.out.println( "Items " + change.getAddedSubList() + " was added."); } if (change.wasRemoved()) { System.out.println( "Items " + change.getRemoved() + " was removed."); } } }); System.out.println("Old list: " + list); list.set(1, "foo"); System.out.println("New list: " + list);
上面程式碼的執行輸出如下:
Old list: [foo, bar, bar] Received event. Items [foo] was added. Items [bar] was removed. New list: [foo, foo, bar]
如你所見,設定操作只會觸發一次事件。
相關文章
- 使用Java和Reactive Streams構建流式應用JavaReact
- JavaFX桌面應用-構建程式框架Java框架
- 使用LangGraph構建多Agent系統架構!架構
- 使用 Proxy 構建響應式系統
- [譯] 使用原生 JavaScript 構建狀態管理系統JavaScript
- 如何使用bloomfilter構建大型Java快取系統OOMFilterJava快取
- JavaFX 如何使用內建的對話方塊Java
- 系統設計:使用Scala、Spark和Hadoop構建推薦系統SparkHadoop
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (四)GoReactJS
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (三)GoReactJS
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (二)GoReactJS
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (一)GoReactJS
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (五)GoReactJS
- [譯] 使用 Go 和 ReactJS 構建聊天系統 (六)GoReactJS
- 使用Kafka Streams構建事件源系統的經驗Kafka事件
- 面向模式構建系統架構 (轉)模式架構
- C++構建工具-構建系統C++
- 如何構建推薦系統
- 實踐:GNU構建系統
- 智慧金融系統的構建
- 根檔案系統構建
- 如何構建一個系統?
- 使用 Go 和 ReactJS 構建聊天系統(五):改善前端GoReactJS前端
- 使用飛冰+dva快速構建一個後臺系統
- 使用 Subversion、Hudson 和 Eclipse 構建持續整合系統Eclipse
- PostgreSQL構建通用標籤系統SQL
- AlertManager解析:構建高效告警系統
- 如何使用NodeJS構建基於RPC的API系統NodeJSRPCAPI
- 使用inotify-tools與rsync構建實時備份系統
- 使用Java和Redis構建高效能的快取系統JavaRedis快取
- JavaFx WebView使用研究JavaWebView
- liiklus:基於事件的Reactive(RSocket/gRPC)系統事件ReactRPC
- Backpressure in Reactive Systems 響應式系統的反壓React
- 基於Hyperf + Vue + Element 構建的後臺管理系統(內建聊天系統)Vue
- 如何構建設計語言系統
- OpenStack的高可用系統構建(1)
- OpenStack的高可用系統構建(2)
- 如何構建自己的筆記系統?筆記