4 ラジオ・ボタン
この章では、ラジオ・ボタンのコントロール、およびToggleButton
クラスの特殊な実装であるRadioButton
クラスについて説明します。
ラジオ・ボタンのコントロールは選択済の場合も選択解除の場合もあります。通常、ラジオ・ボタンはグループにまとめられており、一度に選択できるボタンは1つのみです。この動作は、グループ内ですべて選択されていない状態にできるトグル・ボタンとは異なります。
図4-1に、ラジオ・ボタンがグループに追加されているRadioButton
サンプルの3つの画面キャプチャを示します。
次の段落を読み、アプリケーションにラジオ・ボタンを実装する方法について学習します。
ラジオ・ボタンの作成
JavaFX SDKのjavafx.scene.control
パッケージで提供されているRadioButton
クラスでは、ラジオ・ボタンの作成に使用できる2つのコンストラクタが用意されています。例4-1に2つのラジオ・ボタンを示します。rb1の作成には、パラメータのないコンストラクタを使用します。このラジオ・ボタンのテキスト・キャプションはsetText
メソッドを使用して設定します。rb2のテキスト・キャプションは対応するコンストラクタ内で定義されます。
例4-1 ラジオ・ボタンの作成
//A radio button with an empty string for its label RadioButton rb1 = new RadioButton(); //Setting a text label rb1.setText("Home"); //A radio button with the specified label RadioButton rb2 = new RadioButton("Calendar");
setSelected
メソッドを使用し、その値をtrue
に設定すると、ラジオ・ボタンを明示的に選択済にできます。ユーザーが特定のラジオ・ボタンを選択したかどうかを確認する必要がある場合は、isSelected
メソッドを適用します。
RadioButton
クラスはLabeled
クラスの拡張であるため、テキスト・キャプションに加えてイメージも指定できます。setGraphic
メソッドを使用してイメージを指定します。例4-2に、アプリケーションにグラフィカル・ラジオ・ボタンを実装する方法を示します。
グループへのラジオ・ボタンの追加
通常、ラジオ・ボタンはグループで使用され、複数の相互排他オプションを示します。ToggleGroup
オブジェクトは、関連するすべてのラジオ・ボタンへの参照を指定し、それを管理し、一度に1つのみラジオ・ボタンが選択されるようにします。例4-3では、トグル・グループと3つのラジオ・ボタンを作成して、それぞれのラジオ・ボタンをトグル・グループに追加し、アプリケーションの起動時にどのボタンが選択されるかを指定します。
例4-3 ラジオ・ボタン・グループの作成
final ToggleGroup group = new ToggleGroup(); RadioButton rb1 = new RadioButton("Home"); rb1.setToggleGroup(group); rb1.setSelected(true); RadioButton rb2 = new RadioButton("Calendar"); rb2.setToggleGroup(group); RadioButton rb3 = new RadioButton("Contacts"); rb3.setToggleGroup(group);
レイアウト・コンテナを使用してこれらのラジオ・ボタンを並べ、アプリケーションにそのコンテンツを追加すると、その出力は図4-2のようになります。
ラジオ・ボタンのイベントの処理
通常、グループ内のラジオ・ボタンのいずれかが選択されると、アプリケーションがアクションを実行します。例4-4のコード・フラグメントを確認し、選択したラジオ・ボタンに応じてアイコンがどのように変化するかを学習します。
例4-4 ラジオ・ボタンのアクションの処理
ImageView image = new ImageView(); rb1.setUserData("Home") rb2.setUserData("Calendar"); rb3.setUserData("Contacts"); final ToggleGroup group = new ToggleGroup(); group.selectedToggleProperty().addListener( (ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle) -> { if (group.getSelectedToggle() != null) { final Image image = new Image( getClass().getResourceAsStream( group.getSelectedToggle().getUserData().toString() + ".jpg")); icon.setImage(image); } });
それぞれのラジオ・ボタンにユーザー・データが割り当てられています。ChangeListener<Toggle>
オブジェクトがグループ内で選択したトグルをチェックします。これはgetSelectedToggle
メソッドを使用して、現在選択されているラジオ・ボタンを識別し、getUserData
メソッドをコールしてそのユーザー・データを抽出します。そのユーザー・データは、ロードするイメージ・ファイル名を構築するために適用されます。
たとえば、rb3が選択されると、getSelectedToggle
メソッドが"rb3"を返し、getUserData
メソッドが"Contacts"を返します。このため、getResourceAsStream
メソッドは値"Contacts.jpg"を受け取ります。図4-1にアプリケーションの出力を示します。