[java] JavaFX 컴포넌트 간의 데이터 전달

JavaFX는 Java 기반의 UI 프레임워크로, 다양한 UI 컴포넌트를 제공합니다. 이러한 컴포넌트들 간에 데이터를 전달하는 방법은 애플리케이션의 유지보수와 확장에 중요한 역할을 합니다. 이번 글에서는 JavaFX 컴포넌트 간의 데이터 전달을 어떻게 할 수 있는지 살펴보겠습니다.

1. 속성(Property)을 이용한 데이터 전달

JavaFX에서는 속성(Property)을 사용하여 컴포넌트 간의 데이터를 전달할 수 있습니다. 속성은 값을 저장하고, 그 값이 변경될 때 이를 감지할 수 있는 기능을 제공합니다. JavaFX에서는 SimpleObjectProperty, SimpleStringProperty 등의 클래스를 제공하여 속성을 생성할 수 있습니다.

public class DataModel {
    private final StringProperty dataProperty = new SimpleStringProperty();

    public StringProperty dataProperty() {
        return dataProperty;
    }

    public void setData(String data) {
        dataProperty.set(data);
    }

    public String getData() {
        return dataProperty.get();
    }
}

위 코드에서 DataModel은 데이터를 저장하고 제공하는 모델 클래스입니다. dataProperty는 데이터를 저장하는 속성이며, setData()getData() 메서드를 통해 데이터를 설정하고 가져올 수 있습니다.

이제 데이터를 전달할 컴포넌트에서 DataModel 객체를 생성하고 속성을 바인딩할 수 있습니다.

public class MainController {
    @FXML
    private TextField textField;

    private DataModel dataModel;

    public void initialize() {
        dataModel = new DataModel();
        textField.textProperty().bindBidirectional(dataModel.dataProperty());
    }
}

위 코드에서 MainController는 UI 컴포넌트인 TextField를 가지고 있습니다. initialize() 메서드에서 DataModel을 생성하고, textFieldtextProperty()dataProperty()를 양방향으로 바인딩하여 데이터를 전달합니다.

2. 이벤트 처리를 통한 데이터 전달

JavaFX에서는 이벤트 처리를 통해 컴포넌트 간에 데이터를 전달할 수도 있습니다. 예를 들어, 버튼 클릭 이벤트가 발생했을 때 해당 이벤트를 처리하는 핸들러에서 데이터를 전달할 수 있습니다.

public class MainController {
    @FXML
    private Button button;

    private DataModel dataModel;

    public void initialize() {
        dataModel = new DataModel();
        button.setOnAction(e -> {
            String data = textField.getText();
            dataModel.setData(data);
        });
    }
}

위 코드에서는 버튼의 클릭 이벤트를 처리하는 핸들러에서 textField의 값을 가져와 dataModel에 데이터를 설정합니다.

결론

JavaFX에서는 속성을 이용하여 컴포넌트 간의 데이터를 전달할 수 있습니다. 속성은 변경 감지 기능을 제공하여 데이터 변경을 쉽게 알 수 있습니다. 또한, 이벤트 처리를 통해서도 데이터 전달이 가능합니다. 데이터를 전달하는 방법을 적절하게 선택하여 JavaFX 애플리케이션의 유지보수와 확장성을 높여야 합니다.

참고: JavaFX 속성 바인딩