JavaFX | 속성 이벤트 처리 | ToggleGroup의 ChangeListener처리


이전에 ListeView 대해 선택 상태가 변경 되었을 때의 이벤트 처리를 만들었다. 이것은 선택 상태를 관리하는 속성에 이벤트 리스너를 설정하였다.

이러한 “속성이 변경되었을 때에 ChangeListener에서 이벤트 처리를 한다"는 방식은, JavaFX 컨트롤의 기본적인 이벤트 처리 방식이다. 이 기본 개념을 알면 다른 컨트롤러에서도 유사한 방식으로 이벤트 처리를 설정할 수 있다.

우선 “라디오 버튼을 조작했을 때의 이벤트 처리"에서 생각해 보자. 라디오 버튼은 ToggleGroup라는 그룹 관리 클래스를 사용하여 여러 라디오 버튼을 하나로 관리하고 있었다. 라디오 버튼이 선택되면 이 ToggleGroup의 선택 상태를 나타내는 속성 값이 변경된다.

이 속성은 “selectedToggleProperty"라는 것으로, ReadOnlyObjectProperty 클래스의 인스턴스가 설정되어 있다. 이에 “addListener"에 ChangeListener를 설정함으로써 선택이 변경되었을 때 처리 할 수 있도록 되어 있다.

그러면 실제로 간단한 샘플을 만들어 보자.

<?xml version="1.0" encoding="UTF-8"?>
 
<?language javascript?>
<?import java.lang.*?>
<?import java.net.URL ?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.collections.FXCollections?>
<?import javafx.scene.layout.*?>
<BorderPane xmlns="http://javafx.com/javafx"
    xmlns:fx="http://javafx.com/fxml"
    fx:controller="com.devkuma.javafx.AppController">
    <stylesheets>
        <URL value="@app.css" />
    </stylesheets>
    <top>
        <Label fx:id="label1" text="This is FXML!" />
    </top>
    <center>
        <VBox>
            <fx:define>
                <ToggleGroup fx:id="group1" />
            </fx:define>
            <RadioButton text="Male" toggleGroup="$group1" userData="남자" selected="true" />
            <RadioButton text="Female" toggleGroup="$group1" userData="여자"/>
        </VBox>
    </center>
    <bottom>
    </bottom>
</BorderPane>

먼저 FXML에서 라디오 버튼을 제공한다. 위와 같은 형태로 ToggleGroup을 포함하는 2개의 라디오 버튼이 있다. 여기에서는 “userData"라는 속성이 포함되어 있다. 이것은 라디오 버튼에 자신의 데이터를 갖게 위한 것으로, 나중에 사용하기 때문에 작성해 두자. 그 외에는 특히 아무것도 특별한 것은 하지 않는 일반 라디오 버튼이다.