libro
www.tuyano.com
初心者のためのJavaFXプログラミング入門

主なコントロールの利用 (3/5)

作成:2014-11-29 10:13
更新:2014-11-29 10:13

■ToggleGroupについて

ラジオボタンがチェックボックスと異なるのは、複数のコントロールがまとめて扱われる、という点にあります。ただインスタンスを作っただけでは単に「クリックすると選択されるボタン」でしかありません。ラジオボタンは、複数のボタンがグループとして機能し、それらの中から常に1つだけが選択されるようになっていなければいけません。

これは「ToggleGroup」というクラスを利用します。これはjavafx.scene.controlパッケージにあるもので、その名の通り、ON/OFFする複数のコントロールを1つのグループとして管理するための機能を提供します。これは以下のようにインスタ素を作ります。
new ToggleGroup()

引数などは一切不要です。RadioButtonには、そのラジオボタンが所属するグループを設定するためのメソッドが用意されており、これでToggleGroupを設定します。
《RadioButton》.setToggleGroup(《ToggleGroup》);

複数のRadioButtonに同じToggleGroupを設定すると、それらは1つのグループとなり、常にクリックした1つだけしか選択されないようになります。

下のリスト欄に、簡単な例を挙げておきましょう。ここでは2つのRadioButtonを作成し、それらに同じToggleGroupを設定しています。常にクリックしたラジオボタンだけが選択されるようになっているのがわかるでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

package com.tuyano.libro;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;

public class App extends Application {
    Label label;
    ToggleGroup group;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        label = new Label("This is JavaFX!");
        group = new ToggleGroup();
        RadioButton btn1 = new RadioButton("Male");
        btn1.setToggleGroup(group);
        btn1.setSelected(true);
        RadioButton btn2 = new RadioButton("Female");
        btn2.setToggleGroup(group);
        btn1.setOnAction((ActionEvent)->{
            label.setText("you are Male?");
        });
        btn2.setOnAction((ActionEvent)->{
            label.setText("you are Female?");
        });
        
        BorderPane pane = new BorderPane();
        pane.setTop(label);
        FlowPane flow = new FlowPane();
        flow.getChildren().add(btn1);
        flow.getChildren().add(btn2);
        pane.setCenter(flow);
        Scene scene = new Scene(pane, 320, 120);
        stage.setScene(scene);
        stage.show();
    }

}

※関連コンテンツ

「初心者のためのJavaFXプログラミング入門」に戻る