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