TableViewは、それぞれのセルの値をPropertyというオブジェクトから取得しています。
Propertyにはリスナーを登録することが出来ます。
TableViewは、リスナーを利用しているので、
あらかじめTableViewに設定されたPropertyの値がsetメソッドによって変更されたとき、
その変更内容が、自動的にTableViewの表示に反映される仕組みになっています。
これをバインディングといいます。
以下は、テキストフィールドでEnterを押した時のイベントです。
単純な代入ではなく、setメソッドを使っています。
java
1 // テキストフィールドで、キーボードを離した時のイベント
2 this.textField.setOnKeyReleased((ev) -> {
3
4 // Enterキーをおした時
5 if (ev.getCode() == KeyCode.ENTER) {
6
7 // テーブルで現在選択されているアイテムを取得
8 // Propertyをsetメソッドで変更する
9 // ※childWindow:子画面
10 // ※childWindow.getTable():子画面にあるTableViewを取得するメソッド
11 childWindow.getTable().getSelectionModel().getSelectedItem().nameProperty().
12 set(this.textField.getText());
13 }
14 });
参考までに、モデルの定義部分
Java
1 public static class TestModel {
2
3 // フィールドとして、Propertyを保持する
4 private IntegerProperty id = new SimpleIntegerProperty();
5 private StringProperty name = new SimpleStringProperty();
6
7 public TestModel (int id, String name) {
8 this.id.set(id);
9 this.name.set(name);
10 }
11
12 // ID Propertyを取得する
13 public IntegerProperty idProperty () {
14 return this.id;
15 }
16
17 // 名前Propertyを取得する
18 public StringProperty nameProperty () {
19 return this.name;
20 }
21 }
TableViewの定義部分
Java
1 // テーブル
2 this.table = new TableView<>();
3
4 // カラムを作成
5 TableColumn<TestModel, Integer> idColumn = new TableColumn<>("ID");
6 TableColumn<TestModel, String> nameColumn = new TableColumn<>("名前");
7
8 // カラムに、モデルのプロパティの名前を設定
9 idColumn.setCellValueFactory(new PropertyValueFactory<TestModel, Integer>("id"));
10 nameColumn.setCellValueFactory(new PropertyValueFactory<TestModel, String>("name"));
11
12 // テーブルに、データを設定
13 table.getColumns().addAll(idColumn, nameColumn);
14 table.getItems().addAll(new TestModel(0, "鈴井"), new TestModel(1, "高橋"), new TestModel(2, "田中"));
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。