質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Q&A

1回答

7904閲覧

【JavaFX】【TableView】編集後のテーブルビューの行内容を即時getしたい。

mori02

総合スコア35

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

0グッド

0クリップ

投稿2015/09/02 08:05

編集2022/01/12 10:55

JavaFXにて
親画面にはテキストフィールドが1つ、
テキストフィールドをダブルクリックすると子画面に遷移、
子画面には編集可能なTableViewが1つ、
行がクリックされるとその行の内容が親画面のテキストフィールドに反映される、
という画面があります。

しかしテーブルビューの行内容を編集してもテキストフィールドの値は変わらず、
他の行をクリックしてからその行をクリックすると反映される状態です。

今回したいことは、
テーブルビューの行内容を編集してEnterキーが押された確定時に、
テキストフィールドに編集後の値が即時反映させることでございます。

Googleで検索を行うも「再描画」のような方法が見つけれておりません。
上記の方法をお分かりの方がいらっしゃいましたら、ご指南いただけないでしょうか。
どうぞよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

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, "田中"));

投稿2015/09/03 14:27

askyq

総合スコア46

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問