S-JIS[2012-06-17] 変更履歴

TableView(JavaFX Scene Builder)

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を振ることが出来るので、コントローラークラスから個別に アクセスできる。


TableViewの設定

Table Viewのプロパティーについて。

Table Menu Button

「Table Menu Button」にチェックを付けると、タイトル行の右端に「+」印が出る。
実行時にこれをクリックすると、カラム名一覧が表示される。
そしてカラム名のチェックを外すとその列は非表示になる。


TableColumnの設定

Table Columnのプロパティーやレイアウトについて。
(Table Columnはコンテントパネルからは選択できないので、階層パネルで選択する)

Text

列ヘッダー(タイトル)の文字列を変更できる。

Sortable

チェックを入れると、実行時にその列の値でソートすることが出来るようになる。
(実行時に列ヘッダーをクリックすると、その列のデータで表がソートされる)

Resizable

チェックを入れると、実行時に列の幅を変更できるようになる。

Min Width/Pref Width/Max Width

列の幅(最小・推奨・最大)を設定する。
デフォルトの幅は推奨サイズ(Pref Width)となる。


データ追加方法

テーブルにデータ(行)を追加する方法。


Scene BuilderでTableViewとTableColumnを配置し、fx:idを付けておく。

今回は例として、TableViewのfx:idtable1、TableColumnのfx:idcol1col2とする。


次に、テーブルの一行のデータを保持するクラスを用意する。

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する。


使用法に戻る / Scene Builder目次へ戻る / JavaFXへ戻る / Javaへ戻る / 技術メモへ戻る
メールの送信先:ひしだま