国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

香港云服务器
服務器之家 - 編程語言 - JAVA教程 - 利用JavaFX工具構建Reactive系統

利用JavaFX工具構建Reactive系統

2020-04-07 11:28leoxu JAVA教程

這篇文章主要介紹了使用JavaFX構建Reactive系統,利用JavaFX工具集中的新的超棒特性來構建響應式的快速應用程序,感興趣的小伙伴們可以參考一下

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

1. 屬性值

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

示例:

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

2. 綁定值

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

示例:

?
1
2
3
TextField fieldA = new TextField();
TextField fieldB = new TextField();
fieldA.prefWidthProperty().bind(fieldB.widthProperty());

3. 可觀察的列表

屬性并不是唯一可以被觀察的東西。如果列表是被封裝到了一個 ObservableList 中,那么列表的成員同樣也是可以被觀察到的。ObservableList 的響應模型是相當先進的。你不僅能在列表被修改時收到通知,也可以看到列表具體是如何被修改的。

示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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);

上面代碼的運行輸出如下:

?
1
2
3
4
5
Old list: [foo, bar, bar]
Received event.
Items [foo] was added.
Items [bar] was removed.
New list: [foo, foo, bar]

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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類,你可以創建出任何類型的表達式。比如說你有了兩個可以讓用戶輸入信息的文本域。現在想要定義一個只讀域,其中總是會包含一個字符串,如果兩個串的長度相等,將會是兩個串逐個字符間隔混在一起進行顯示。如果長度不等,則顯示一條幫助信息。
示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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諸多特性的其中一點點。希望你可以找到更多利用這個事件系統的創造性方式!

延伸 · 閱讀

精彩推薦
  • JAVA教程Java使用Deque實現堆棧的方法

    Java使用Deque實現堆棧的方法

    這篇文章主要介紹了Java使用Deque實現堆棧的方法,實例分析了java簡單實現堆棧的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下 ...

    鑒客2012019-12-27
  • JAVA教程java對象初始化順序驗證示例

    java對象初始化順序驗證示例

    以下這段小程序對調用對象構造函數時,父類構造函數、成員變量初始化函數,以及非靜態初始化塊調用順序進行驗證,不考慮靜態成員及靜態初始化塊...

    java教程網4562019-11-05
  • JAVA教程Java解析Excel內容的方法

    Java解析Excel內容的方法

    這篇文章主要介紹了Java解析Excel內容的方法,實例分析了java解析excel文件的技巧,具有一定參考借鑒價值,需要的朋友可以參考下 ...

    damaolly1222019-12-12
  • JAVA教程java內存溢出示例(堆溢出、棧溢出)

    java內存溢出示例(堆溢出、棧溢出)

    這篇文章主要介紹了java內存溢出示例(堆溢出、棧溢出),需要的朋友可以參考下 ...

    Java教程網2202019-11-21
  • JAVA教程Java進階教程之異常處理

    Java進階教程之異常處理

    這篇文章主要介紹了Java進階教程之異常處理,本文講解了JAVA的異常處理機制、異常的類型、拋出異常、自定義異常等內容,需要的朋友可以參考下 ...

    Vamei2912019-11-27
  • JAVA教程JAVA隨機打亂數組順序的方法

    JAVA隨機打亂數組順序的方法

    這篇文章主要介紹了JAVA隨機打亂數組順序的方法,包含了隨機數的應用及數組的排序等操作,是Java操作數組的典型應用,需要的朋友可以參考下 ...

    shichen20141252019-12-06
  • JAVA教程java觀感示例分享

    java觀感示例分享

    這篇文章主要介紹了java觀感示例,該實例查詢并生成了系統中存在觀感對應的按鈕并在用戶點擊相應按鈕時將窗口的觀感切換到指定的觀感上 ...

    java技術網1212019-11-12
  • JAVA教程Java簡單獲取字符串像素的方法

    Java簡單獲取字符串像素的方法

    這篇文章主要介紹了Java簡單獲取字符串像素的方法,涉及Java針對字符串字體操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下 ...

    ruknow2042020-01-12
575
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日韩影音| av免费网站在线观看 | 日韩欧美一区二区在线观看 | 中文字幕视频二区 | 国产资源在线看 | 在线播放高清视频www | 中文字幕日本一区二区 | 久久久久久国产免费 | 国产精品久久久久久久久久东京 | 91精品啪啪 | 国产一级毛片国语一级 | 狠狠的日 | 精精国产xxxx视频在线播放 | 羞羞视频在线 | 日韩免费一区二区 | 国产毛片视频 | 亚洲视频在线一区 | 免费观看黄色av网站 | 中文字幕视频一区 | 99re6在线视频精品免费 | 欧美日韩亚洲一区 | 天堂av一区二区 | 精品一二三区在线观看 | 日本一区二区免费视频 | 久久天天躁狠狠躁夜夜免费观看 | 成人不卡视频 | 欧美日韩电影一区二区 | 精品黄色国产 | 欧美成视频 | 免费自拍视频 | 日韩免费高清视频 | 免费一区 | 国产日韩一区二区三区 | 亚洲高清视频在线观看 | 欧美老妇交乱视频 | 天天久久综合网 | 三级视频在线观看 | 视频一区二区国产 | 欧美黄色成人 | 在线日韩视频 | 欧美一级欧美三级在线观看 |