プロジェクト

全般

プロフィール

JavaFXと表(TableView)

TableViewに関する資料

Oracle公式ドキュメント

JavaFX Working with JavaFX UI Components - Table View
JavaFX: JavaFX UIコンポーネントの操作 - 表ビュー

記事、ブログ、等

JavaFX 8 Tutorial - Part 2: Model and TableView
JavaFX 2で始めるGUI開発 第5回 リスト、コンボボックス、テーブル(5/7)

過去に書いたTableViewの使い方

JavaFX 2のTableViewを使うメモ
JavaFXのTableViewをScene Builderで作成
TableViewで既に行として表示済みのデータの列を更新する際の注意点

使い方メモ

TableViewの設置例

  • 表形式で表示するデータクラスを定義
  • TableViewを配置
  • TableColumnを配置
  • コントローラークラスにTableView, TableColumnのフィールドを定義
  • 各TableColumnとデータクラスのデータ要素を紐付け
  • TableViewとデータクラスのリストを紐付け

データクラスの定義

JavaFXのプロパティをフィールドに持つデータクラスを定義します。
例として、整数型のID、文字列型のNameを持つMyDataクラスを次に示します。

public class MyData {
    private IntegerProperty idProperty = new SimpleIntegerProerty();
    private StringProperty nameProperty = new SimpleStringProperty();

    public MyData(int id, String name) {
        idProperty.set(id);
        nameProperty.set(name);
    }

    public IntegerProperty idProperty() {
        return idProperty;
    }
    public StringProperty nameProperty() {
        return nameProperty;
    }
}

TableColumnに紐付けるために、データクラスにJavaFXプロパティ型のフィールドを設け、プロパティを取り出すメソッドを定義します。

  • JavaFXのプロパティ型でなく、通常のデータ型のフィールドとgetメソッドを定義しても表示できますが値の変更の反映はできません。

レイアウト(配置)

TableViewコントロールは、スクロール機能がついているので、単独で任意のコンテナに配置します。
TableViewは、列ごとにTableColumnを子要素として持ちます。

SceneBuilderでTableViewを配置、子要素にTableColumnが2つある例です。

コントローラーのフィールドにTableViewとTableColumnを定義

public class MyController implements Initializable {
    :
    @FXML
    private TableView<MyData> table;  // ①
    @FXML
    private TableColumn<MyData, Integer> idColumn;  // ②
    @FXML
    private TableColumn<MyData, String> nameColumn;  // ②
    :
}
  • ①型パラメータに、表のレコード(行)を表現するデータクラスを指定してTableViewのフィールドを宣言
  • ②型パラメータに、①のクラスと、その列のデータの型を指定してTableColumnのフィールドを宣言

FXMLファイルのfx:idにフィールド名を指定

Scene Builderで、FXMLのTableViewおよびTableColumnのfx:idに、コントローラーのフィールド名を設定します。

h4.

スクロール

現在表示している行の範囲を知るには?

  • TableViewのgetSelectionModelに、getSelectedIndexまたはgetFocusedIndexを問い合わせると、テーブルの特定のセルを明示的に選択していない場合、前者は-1が、後者は0が返ります。


20日前に更新