JavaFXのTableViewについて質問があります。
ObservableListクラスをsetItemして、画面とデータの連結を行うようなのですが、ObservableListクラスについてよく分かりません。
普通のリストと何が違うのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
Observable
(観察可能)というのは、イベントの検知ができるという意味で、「リスナー」と呼ばれるイベントハンドラーにイベントの発生を通知する仕組みを持っていることを意味します。
ObservableList
の場合は、ListChangeListener
というリスナーを登録することで、リストが変更(追加・削除・置換などの操作を)されたときにリスナーにイベント(ListChangeListener.Change
)を通知することができます。
Javaのイベント処理は、JavaFX以前から、このリスナーの仕組みが使われています。
以下のサンプルは、リストの値を変更すると、標準出力にevt= <イベントの内容>
が出力される処理です。
lang
1// Java8以降 2 3import javafx.application.*; 4import javafx.collections.*; 5import javafx.scene.*; 6import javafx.scene.control.*; 7import javafx.scene.control.cell.*; 8import javafx.scene.layout.*; 9import javafx.stage.*; 10 11public final class EditableListPane extends Application { 12 13 @Override 14 public void start(Stage stage) throws Exception { 15 // シーンの生成 16 AnchorPane pane = new AnchorPane(); 17 Scene scene = new Scene(pane); 18 stage.setScene(scene); 19 20 // 編集可能なリストビュー 21 ObservableList<String> list = FXCollections.observableArrayList("aaa", "bbb", "ccc"); 22 ListView<String> listView = new ListView<>(list); 23 listView.setEditable(true); 24 pane.getChildren().add(listView); 25 listView.setCellFactory(TextFieldListCell.forListView()); 26 listView.setOnEditCommit(evt -> { 27 list.set(evt.getIndex(), evt.getNewValue()); 28 }); 29 30 // リスナーの登録 31 // オーバーロードメソッドがあるためキャスト 32 list.addListener((ListChangeListener<String>) evt -> { 33 System.out.println("evt = " + evt); 34 }); 35 36 // ステージを表示 37 stage.show(); 38 } 39 40}
参考リンク:
ObservableList (JavaFX 8)
ListChangeListener.Change (JavaFX 8)
(2014-09-22) 細かい修正と、参考リンクを追加しました。
投稿2014/09/18 12:03
総合スコア9388
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/09/22 06:52