先ほどのサンプルでは、
setOnMouseClickで、選択された項目のテキストを取り出すのに以下のような処理をしていました。
String obj = list1.getSelectionModel()
.getSelectedItem();
getSelectionModelというものを呼び出し、それで返されるインスタンス内の
getSelectedItemというメソッドを呼び出しています。これで、選択された項目のオブジェクトが取得できたのです。これは、
ListViewの「
SelectionModel」というものを理解しないと何をしているかわからないでしょう。
「
SelectioModel」というのは、選択された項目を管理する「
モデルクラス」です。JavaFXでは、さまざまなデータを管理するのに「モデル」という概念を導入しています。モデルは動的に操作するデータを管理するためのものです。
選択された項目は、
SelectionModelというモデルクラスを使って管理されます。
ListViewの「
getSelectionModel」メソッドを呼び出すことで、そのListViewに組み込まれている
SelectionModelインスタンスを得ることができます。
SelectionModelクラスには、選択項目に関する各種のメソッドが用意されています。ここでは「
getSelectedItem」というメソッドを使っていますね。これは、選択された項目のインスタンスを返すメソッドです。これで項目のオブジェクトを取得し、そこから表示されたテキストなどを取り出せばいい、というわけです。
●保管する値と総称型についてListViewは、総称型に対応しています。先ほどのサンプルコードを見ると、
ListViewの値を保管するフィールドが以下のように変更されているのに気づいた人もいるでしょう。
@FXML ListView<String> list1;
このように
<String>を追記することで、保管する値を
Stringに限定することができます。
getSelectedItemで値を直接
String変数に代入したのも、総称型を使ったおかげなのです。