JavaFXの勉強 その4

List

  • javafx.scene.control.ListView
    • 表示する項目はjavafx.collections.ObservableListインターフェイスで表す

      • java.util.Listのサブインターフェイス
      • 要素の追加や削除が発生した時にイベントを発生させる
      • javafx.collections.FXCollectionsクラスを使用して生成
      • FXMLで記述する場合

        <FXCollections fx:factory="observableArrayList">

    • 項目選択はjavafx.scene.control.MultipleSelectionModelクラスで行う

      • デフォルトでは単一選択
      • 選択モードはjavafx.scene.control.SelectionModeで表す
      • 選択されている項目の取得もこのMultipleSelectionModelクラスで行う
      • (各メソッドの説明と用途はここでは省略。使用時にAPIを参照する)
    • 項目の編集
      • ListViewは項目をセルとして扱う
      • セルはjavafx.scene.control.Cellで表す
      • ListViewの場合、javafx.scene.control.ListCell (Cellのサブクラス)を使用
      • 使用目的によって、CheckBoxListCell、ChoiceBoxListCell、ComboBoxListCell、TextFieldListCell 等のListCellのサブクラスを指定する
      • ListView#setEditable(true)で編集可能にする
      • ListView#setCellFactory(Callback<ListView,ListCell> value)で編集可能なセルファクトリを登録
      • 編集完了時のイベント
        • setOnEditCommit(EventHandler<ListView.EditEvent> value)で登録

ComboBox

  • javafx.scene.control.ComboBox
    • 表示する項目はjavafx.collections.ObservableListインターフェイスで表す(ListViewと同じ)
    • ListCellを用いて項目の描画をカスタマイズ可能
    • 単一選択
    • 編集可能なSelectionModelクラスを指定する必要はない(ListViewと異なる)
    • 項目が選択されるとActionEventが発生する

Table

  • SwingとJavaFXで使い方が大きく異なるコンポーネント
  • javafx.scene.control.TableView
  • 任意のJava Beansをモデルとして扱うことが可能
  • カラムをjavafx.scene.control.TableCloumnで表す
    • TableCloumn#setCellValueFactory()
      • フィールドとカラムを関連付ける
  • TableViewで使用できるファクトリ
    • javafx.scene.control.cell.PropertyValueFactoryが提供されている
      • Genericsパラメータを2つとる。
      • 前者がJava Beansの型、後者がテーブルに表示するデータの型
  • データの編集
    • 編集可能にする
    • 編集可能なCellを指定する
    • 編集が完了した時点でモデルに変更を反映する(setOnEditCommit())
    • テーブルのセル
      • javafx.scene.control.TableCell
      • javafx.scene.control.cell.TextFieldTableCell extends TableCell (編集可能なセル)
      • TextFieldTableCell#forTableColumn (ファクトリを返す)
    • TableCellのGenericsの第2パラメータはString
      • セルに表示している型が文字列以外の場合javafx.util.StringConverterを使用(サブクラスがある)
      • 例: Integerの場合、javafx.util.converter.IntegerStringConverter
      • forTableColumnの引数にconverterクラスを指定する

参考

Java技術最前線 - JavaFX 2で始めるGUI開発 第5回 リスト、コンボボックス、テーブル:ITpro