【JavaFX】選択ボックスを作成・イベントを登録する方法(ChoiceBox)

JavaFXで選択ボックスの作成・イベントを登録する方法について記載します。

選択ボックスを作成する方法は色々ありますが

1. 文字列を指定して選択ボックスを作成する方法
2. キー・バリューを指定して選択ボックスを作成する方法

について記載します。

1. 文字列を指定して選択ボックスの作成・イベントを登録する方法

1-1. 選択ボックスの作成

選択ボックスを作成するには、ChoiceBoxクラスを使用します。

構文

ChoiceBox<String> cb = new ChoiceBox<>();
cb.getItems().addAll(“要素1″,”要素2″,”要素3”);

実行例

1-2. イベントの登録

選択ボックスにイベントを登録するには、addListener メソッドを使用します。

構文

ChoiceBox<String> cb = new ChoiceBox<>();
cb.getSelectionModel().selectedIndexProperty().addListener( ChangeListener<Number> );

addListener メソッドの引数には、ChangeListenerインタフェースを実装したクラスを指定します。

実行例

リストを変更すると、次のメッセージが表示されます。


ChangeListenerインタフェースを実装したクラスを使用してイベントを登録

上記の例では、ChangeListenerインタフェースを実装したクラスを使用してイベントを登録しましたが、次のようにラムダ式を使用してイベントを登録することもできます。

ラムダ式を使用してイベントを登録

1-3. 任意の値を選択する方法

SingleSelectionModelクラスのselectメソッドを使用すると、インデックスを指定して任意の値を選択状態にすることができます。

構文

ChoiceBox<String> cb = new ChoiceBox<>();
cb.getItems().addAll(“apple”,”orange”,”banana”);
cb.getSelectionModel().select(1);

実行例

2. キー・バリューを指定して選択ボックスの作成・イベントを登録する方法

キー・バリューを使用した場合のメリットは、イベント発生時に選択された要素のキー・バリューの値を取得できます。

1の文字列を指定した選択ボックスの場合は、イベント発生時に選択された要素のインデックスを取得できます。

この場合、選択ボックスに表示する要素に変更があった際に都合が悪くなります。
例えば、選択された要素のインデックスをDBに保存していた場合、選択ボックスの途中に要素が追加になると、既存の要素のインデックスが変わってしまうため、DBに保存した既存の値を変更する必要があります。

2-1. 選択ボックスの作成

キー・バリューを指定して選択ボックスを作成するには、独自のクラスを実装して、そのクラスのインスタンスを値として選択ボックスを作成します。

構文

ChoiceBox<String> cb = new ChoiceBox<>();
cb.getItems().addAll(インスタンスA,インスタンスB,インスタンスC);

実行例

ポイントは選択ボックスに表示する各要素の名前は toString メソッドをオーバーライドして指定します。

上記の例では、Fruitsクラスの変数(value)の値を選択ボックスに表示する名前としています。

2-2. イベントの登録

選択ボックスにイベントを登録するには、addListener メソッドを使用します。

構文

ChoiceBox<独自クラス> cb = new ChoiceBox<>();
cb.getSelectionModel().selectedItemProperty().addListener( ChangeListener<独自クラス> );

addListener メソッドの引数には、ChangeListenerインタフェースを実装したクラスを指定します。

実行例

リストを変更すると、次のメッセージが表示されます。


ChangeListenerインタフェースを実装したクラスを使用してイベントを登録

上記の例では、ChangeListenerインタフェースを実装したクラスを使用してイベントを登録しましたが、ラムダ式を使用してイベントを登録することもできます。

ラムダ式を使用した方法は、1-2 と同様なのでそちらを参照ください。

2-3. 任意の値を選択する方法

SingleSelectionModelクラスのselectメソッドを使用すると、独自クラスのインスタンスを指定して任意の値を選択状態にすることができます。

構文

ChoiceBox<Fruits> cb = new ChoiceBox<>();
cb.getItems().addAll(apple, orange, banana);
cb.getSelectionModel().select(orange);

実行例

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする