JavaFX Scene BuilderのTableViewのメモ。
|
|
表(テーブル)を表示するのがTableView。
Scene Builder 1.0-beta42ではまだ限定的な機能しか使えない。
表(テーブル)は、Scene Builderのライブラリーパネルから「Table
View」を選び、中央のコンテントパネルにドロップすることで配置する。
Scene Builder 1.0-beta42では、デフォルトで2列ある状態になる。
スクロールバーは自動で付くので、ScrollPaneに貼り付けたりする必要は無い。
ライブラリーパネルからさらに「Table Column」を選んでTableView内にドロップすることで、列を増やす(追加する)ことが出来る。(1.0-beta32にはライブラリーの中にTable Columnは無かった)
あるいは、階層パネルでTableColumnを選択して右クリックメニューで「複製」を選ぶと列が増やせる。
列を削除したい場合は右クリックメニューの「削除」を実行する。
TableViewと各TableColumnには個別にfx:id
を振ることが出来るので、コントローラークラスから個別に
アクセスできる。
Table Viewのプロパティーについて。
「Table Menu Button」にチェックを付けると、タイトル行の右端に「+」印が出る。
実行時にこれをクリックすると、カラム名一覧が表示される。
そしてカラム名のチェックを外すとその列は非表示になる。
Table Columnのプロパティーやレイアウトについて。
(Table Columnはコンテントパネルからは選択できないので、階層パネルで選択する)
列ヘッダー(タイトル)の文字列を変更できる。
チェックを入れると、実行時にその列の値でソートすることが出来るようになる。
(実行時に列ヘッダーをクリックすると、その列のデータで表がソートされる)
チェックを入れると、実行時に列の幅を変更できるようになる。
列の幅(最小・推奨・最大)を設定する。
デフォルトの幅は推奨サイズ(Pref Width)となる。
テーブルにデータ(行)を追加する方法。
Scene BuilderでTableViewとTableColumnを配置し、fx:id
を付けておく。
今回は例として、TableViewのfx:id
をtable1、TableColumnのfx:id
をcol1・col2とする。
次に、テーブルの一行のデータを保持するクラスを用意する。
public class ExampleData { protected String v1; protected int v2;
// コンストラクター public ExampleData(String v1, int v2) { this.v1 = v1; this.v2 = v2; }
public void setValue1(String v) { v1 = v; } public String getValue1() { return v1; } public void setValue2(int v) { v2 = v; } public int getValue2() { return v2; } }
今回の例では、Scene Builder上のcol1をvalue1に、col2をvalue2に対応付ける想定。
コントローラークラスを用意する。
import javafx.collections.ObservableList; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory;
public class TableController implements javafx.fxml.Initializable { public TableView<ExampleData> table1; public TableColumn<ExampleData, String> col1; public TableColumn<ExampleData, Integer> col2;
@Override public void initialize(java.net.URL location, java.util.ResourceBundle resources) { // コントローラーのフィールドとデータクラスのプロパティーを紐付ける col1.setCellValueFactory(new PropertyValueFactory<ExampleData, String>("value1")); col2.setCellValueFactory(new PropertyValueFactory<ExampleData, Integer>("value2")); // データを追加する ObservableList<ExampleData> list = table1.getItems(); list.add(new ExampleData("abc", 123)); } }
TableColumn#setCellValueFactory()で、コントローラーのフィールドとデータクラスのプロパティーを結び付ける。
PropertyValueFactoryのコンストラクターには、データクラスのプロパティー名を指定する。
(プロパティー名がvalue1なら、setValue1()・getValue1()がデータクラスに存在する必要がある)
データを追加するには、TableView#getItems()でObservableListを取得し、それに対してaddする。