2014年3月23日 星期日

JavaFX 8移除各物件之Builder類別

2014年3月18日正式釋出Java SE Development Kit 8,發現與之前的Beta版有很大的差異,特別是將各物件對應之Builder類別移除。

蠻好奇Oracle為什麼要移除Builder這個功能?

回顧一下JavaFX 2的Builder類別

Builder是JavaFX 2一個特殊功能與語法,以Button類別 (按鈕) 為例,其對應之Builder類別為ButtonBuilder,透過ButtonBuilder類別可精簡程式長度,但程式的撰寫方式與以往的Java程式不同。

ButtonBuilder類別的方法包括: 
  • create():建立ButtonBuilder的實體。 
  • build():以ButtonBuilder物件建立按鈕的實體,並回傳Button物件。
  • cancelButton():設定按鈕是否為取消按鈕,則設定按鈕的cancelButton屬性值,若為true,則為取消按鈕。 
  • defaultButton():設定按鈕是否為預設按鈕,則設定按鈕的defaultButton屬性值,若為true,則為預設按鈕。 
ButtonBuilder類別建立按鈕的程式架構如下,首先以create()方法建立ButtonBuilder的實體,最後再以build()方法以ButtonBuilder物件建立Button物件,其間並以上述方法設定按鈕的相關屬性,各方法可為任意順序或省略: 


Button button = ButtonBuilder.create()
  .cancelButton(...)
  .defaultButton(...)
  .build(); 


請參考以下範例示範以ButtonBuilder類別建立按鈕:


Image image = new Image(
  ButtonDemo.class.getResourceAsStream("images/dukeswing.gif"));

Scene scene = SceneBuilder.create()
  .width(250)
  .height(250)
  .root(
    FlowPaneBuilder.create()
      .hgap(5)
      .vgap(5)
      .padding(new Insets(5, 5, 5, 5))
      .alignment(Pos.CENTER)
      .children(
        // 設定一般按鈕
        ButtonBuilder.create()
          // 設定按鈕的文字
          .text("Plain Text")
          // 設定按鈕的最佳寬度
          .prefWidth(100)
          // 設定按鈕的最佳高度
          .prefHeight(20)
          .build(), 
        // 設定樣式按鈕
        ButtonBuilder.create()
          .text("Styling Text")
          // 設定按鈕文字的字型
          .font(Font.font("Verdana", 12))
          // 設定按鈕文字的顏色
          .textFill(Color.rgb(255, 0, 0, 1.0))
          .prefWidth(100)
          .prefHeight(20)
          .build(), 
        // 設定預設按鈕
        ButtonBuilder.create()
          .text("Default")
          // 設定按鈕是否為預設按鈕
          .defaultButton(true) 
          .prefWidth(100)
          .prefHeight(20)
          .build(), 
        // 設定取消按鈕
        ButtonBuilder.create()
          .text("Cancel")
          // 設定按鈕是否為取消按鈕
          .cancelButton(true) 
          .prefWidth(100)
          .prefHeight(20)
          .build(), 
        // 設定圖像按鈕
        ButtonBuilder.create()
          .text("Image Button")
          // 設定按鈕所使用的圖像
          .graphic(new ImageView(image))
          // 設定圖像與文字間的相對位置
          .contentDisplay(ContentDisplay.TOP) 
          .prefWidth(100)
          .build(), 
        // 設定非作用中按鈕
        ButtonBuilder.create()
          .text("Disable Button")
          .graphic(new ImageView(image))
          .contentDisplay(ContentDisplay.TOP) 
          .prefWidth(100)
          // 設定非作用中按鈕
          .disable(true)
          .build()
      )
      .build()
  )
  .build();
...


【執行結果】
【參考資料】

[1] 黃嘉輝,深入研究JavaFX 2。
[2] 黃嘉輝,深入研究Java Swing。
[3] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[4] JavaFX:http://www.oracle.com/technetwork/java/javafx
[5] JavaFX 8.0 API Specification.
[6] Java Platform, Standard Edition 8 API Specification.

© Chia-Hui Huang

沒有留言:

張貼留言