JavaFX | 주요 컨트롤러 이용 | 토글 그룹(ToggleGroup)


라디오 버튼이 체크 박스와 다른 것은 여러 컨트롤이 함께 다루어진다는 점에 있다. 단지 인스턴스를 만든 것만으로는 단순히 “클릭하면 선택되는 버튼"일뿐이다. 라디오 버튼은 여러 버튼이 그룹으로 기능하고 그 중에서 항상 하나만 선택되도록 해야 한다.

그래서 “ToggleGroup"라는 클래스를 이용한다. 이것은 javafx.scene.control 패키지에 있는 것으로, 그 이름과 같이 ON/OFF하는 여러 컨트롤을 하나의 그룹으로 관리하는 기능을 제공한다. 이것은 다음과 같이 인스턴스 생성한다.

new ToggleGroup()

인수 등은 필요없다. RadioButton에는 라디오 버튼이 속한 그룹을 설정하는 메소드가 준비되어 있어서 여기에 ToggleGroup을 설정한다.

radioButton.setToggleGroup(ToggleGroup);

여러 RadioButton에 같은 ToggleGroup을 설정하면 그것들은 하나의 그룹되고, 항상 클릭을 하면 하나만 선택되지 않도록 한다.

아래와 같이 ToggleGroup에 대한 간단한 사용 예제가 있다.

package com.devkuma.javafx;
 
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();
    }
 
}

여기에서는 두 개의 RadioButton을 작성하고 그것들을 동일한 ToggleGroup을 설정하고 있다. 항상 클릭한 라디오 버튼만 선택되도록 되어 있는 것을 알 수 있을 것이다.