最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用JavaFX工具構建Reactive系統(tǒng)

 更新時間:2016年02月29日 15:08:58   作者:leoxu  
這篇文章主要介紹了使用JavaFX構建Reactive系統(tǒng),利用JavaFX工具集中的新的超棒特性來構建響應式的快速應用程序,感興趣的小伙伴們可以參考一下

JavaFX 是Java中用來構建圖形應用程序的新的標準庫, 但許多程序員仍然堅持在使用Swing甚至AWT。關于如何利用JavaFX工具集中的新的超棒特性來構建響應式的快速應用程序,這里有一些建議!

1. 屬性值

如果你對JavaFX組件做過完整的了解,移動遇到過屬性(Property)這個東西。FX庫中幾乎每個值都可以被觀察,分區(qū)(divider)的寬度,圖片的尺寸,文本標識(label)中的文字,一個列表中的子項以及復選框(checkbox)的狀態(tài)。屬性分成另類:可寫屬性和可讀屬性。可寫值可以被修改,使用設置器方法或者直接修改。 JavaFX 會處理事件處置過程并確保每個依賴于此屬性的組件都會被通知到??勺x屬性擁有能讓你在其值被修改時接收到通知的方法。

示例:

// 可讀-且可寫
StringProperty name = new SimpleStringProperty("Emil"); 
// 只讀
ObservableBooleanValue nameIsEmpty = name.isEmpty();

2. 綁定值

當你擁有一個可寫和可讀值的時候,你可以開始就這些值如何關聯定義規(guī)則。一個可寫屬性可以被綁定到一個可讀屬性,如此其值總是會匹配到可讀的這個。綁定并不會立即發(fā)生,不過它們會在值被觀察之前進行(看看我在那里做的就明白了)。 綁定可以是單向或者雙向的。當然,如果它們之間是雙向的,就需要兩個屬性都是可寫的。

示例:

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]

如你所見,設置操作只會觸發(fā)一次事件。

4. StringConverter
有時你會發(fā)現自己要創(chuàng)建一個綁定時無需去提取一個組件中的值。 這個的典型示例就是你有了一個從一個文本域(TextField)獲取到的帶有path 的 StringProperty。如果你想要有一個帶有表示為Path的這個值的可觀察屬性,就需要去為它創(chuàng)建一個StringConverter。
示例:

TextField fileLocation = new TextField();
StringProperty location = fileLocation.textProperty();
Property<Path> path = new SimpleObjectProperty<>();
 
Bindings.bindBidirectional(location, path, new StringConverter<Path>() {
  @Override
  public String toString(Path path) {
    return path.toString();
  }
 
  @Override
  public Path fromString(String string) {
    return Paths.get(string);
  }
});

對象屬性并不是跟文本域的值進行的雙向綁定。

5. Expressions

使用上述的 Bindings類,你可以創(chuàng)建出任何類型的表達式。比如說你有了兩個可以讓用戶輸入信息的文本域?,F在想要定義一個只讀域,其中總是會包含一個字符串,如果兩個串的長度相等,將會是兩個串逐個字符間隔混在一起進行顯示。如果長度不等,則顯示一條幫助信息。
示例:

TextField first = new TextField();
TextField second = new TextField();
TextField mix  = new TextField();
 
mix.textProperty().bind(
  Bindings.when(
    first.lengthProperty().isEqualTo(second.lengthProperty())
  ).then(Bindings.createStringBinding(
    () -> {
      int length    = first.lengthProperty().get();
      String firstText = first.textProperty().get();
      String secondText = second.textProperty().get();
      char[] result   = new char[length * 2];
 
      for (int i = 0; i < length; i++) {
        result[i * 2]   = firstText.charAt(i);
        result[i * 2 + 1] = secondText.charAt(i);
      }
 
      return new String(result);
    }, 
    first.textProperty(),
    second.textProperty()
  )).otherwise("Please enter two strings of exactly the same length.")
);

這里只是JavaFX諸多特性的其中一點點。希望你可以找到更多利用這個事件系統(tǒng)的創(chuàng)造性方式!

相關文章

  • Springboot 全局時間格式化三種方式示例詳解

    Springboot 全局時間格式化三種方式示例詳解

    時間格式化在項目中使用頻率是非常高的,當我們的 API? 接口返回結果,需要對其中某一個 date? 字段屬性進行特殊的格式化處理,通常會用到 SimpleDateFormat? 工具處理,這篇文章主要介紹了3 種 Springboot 全局時間格式化方式,需要的朋友可以參考下
    2024-01-01
  • SpringBoot整合Flink CDC實現實時追蹤mysql數據變動

    SpringBoot整合Flink CDC實現實時追蹤mysql數據變動

    我們將整合Spring Boot和Apache Flink CDC(Change Data Capture)來實現實時數據追蹤,下面是一個基本的實踐流程代碼,包括搭建Spring Boot項目、整合Flink CDC以及實現數據變動的實時追蹤,需要的朋友可以參考下
    2024-07-07
  • springboot2.0整合logback日志的詳細代碼

    springboot2.0整合logback日志的詳細代碼

    這篇文章主要介紹了springboot2.0整合logback日志的應用場景分析,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • Java圖形化編程中的鍵盤事件設計簡介

    Java圖形化編程中的鍵盤事件設計簡介

    這篇文章主要介紹了Java圖形化編程中的鍵盤事件設計,是Java的GUI編程當中的基礎部分,需要的朋友可以參考下
    2015-10-10
  • Spring session實現共享單點登錄案例過程解析

    Spring session實現共享單點登錄案例過程解析

    這篇文章主要介紹了Spring session實現共享單點登錄案例過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Java8 HashMap的實現原理分析

    Java8 HashMap的實現原理分析

    Java8之后新增挺多新東西,接下來通過本文給大家介紹Java8 HashMap的實現原理分析,對java8 hashmap實現原理相關知識感興趣的朋友一起學習吧
    2016-03-03
  • 解決Request.getParameter獲取不到特殊字符bug問題

    解決Request.getParameter獲取不到特殊字符bug問題

    這篇文章主要介紹了解決Request.getParameter獲取不到特殊字符bug問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java深度優(yōu)先遍歷解決排列組合問題詳解

    Java深度優(yōu)先遍歷解決排列組合問題詳解

    這篇文章主要介紹了Java深度優(yōu)先遍歷解決排列組合問題詳解,深度優(yōu)先搜索是遞歸過程,帶有回退操作,因此需要使用棧存儲訪問的路徑信息,當訪問到的當前頂點沒有可以前進的鄰接頂點時,需要進行出棧操作,將當前位置回退至出棧元素位置,需要的朋友可以參考下
    2024-01-01
  • 詳解IDEA搭建springBoot方式一(推薦)

    詳解IDEA搭建springBoot方式一(推薦)

    這篇文章主要介紹了IDEA搭建springBoot方式一(推薦),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • maven依賴的配置和排除依賴過程

    maven依賴的配置和排除依賴過程

    這篇文章主要介紹了maven依賴的配置和排除依賴過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03

最新評論

长汀县| 台北县| 柏乡县| 大石桥市| 黔东| 宁陕县| 清水县| 石棉县| 木兰县| 吉水县| 承德市| 丹江口市| 北票市| 峡江县| 盐边县| 威宁| 化德县| 泗水县| 那坡县| 洪湖市| 咸宁市| 双流县| 喀什市| 托克逊县| 兴城市| 温泉县| 天全县| 镇平县| 沙河市| 北辰区| 佛教| 上栗县| 东丰县| 弥渡县| 泰安市| 霍林郭勒市| 玛纳斯县| 龙里县| 高要市| 齐齐哈尔市| 晋中市|