[java] JavaFX 자바코드와 FXML 파일 혼합 사용

개요

JavaFX는 UI 개발을 위한 자바 기반의 라이브러리로써, 자바코드로 UI를 직접 작성하거나 FXML 파일을 통해 UI를 정의할 수 있습니다. 이번 포스트에서는 JavaFX에서 자바코드와 FXML 파일을 함께 사용하는 방법에 대해 알아보겠습니다.

FXML 파일 생성

먼저, FXML 파일을 생성해야 합니다. 이를 위해서는 Scene Builder와 같은 FXML 에디터를 사용하거나, 직접 XML 포맷으로 파일을 작성할 수도 있습니다.

FXML 파일은 UI의 구조와 속성을 정의하는데 사용되며, JavaFX에서 자동으로 파싱되어 UI 객체와 연결됩니다. 다음은 간단한 FXML 파일의 예입니다.

<!-- Sample.fxml -->
<AnchorPane prefHeight="400" prefWidth="600" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
    <Button layoutX="264.0" layoutY="182.0" onAction="#handleButtonAction" text="Click Me!" />
</AnchorPane>

Java 코드에서 FXML 파일 로드

Java 코드에서 FXML 파일을 로드하고 사용하기 위해서는 FXMLLoader 클래스를 사용해야 합니다. FXMLLoader는 FXML 파일을 읽어와서 자바 객체로 변환하여 반환하는 역할을 합니다. 다음은 FXMLLoader를 사용하여 FXML 파일을 로드하는 예제입니다.

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class MainApp extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

위의 예제에서 FXMLLoader.load() 메서드를 호출해 FXML 파일을 읽고, Parent 타입의 객체로 반환하여 Scene에 설정합니다. 이후에는 일반적인 JavaFX 애플리케이션과 같이 UI를 보여주는 부분을 구현할 수 있습니다.

FXML 파일과 Java 코드 연결

FXML 파일을 로드한 후에는 Java 코드에서 FXML에 정의된 UI 객체를 가져와서 필요한 작업을 수행할 수 있습니다. 이를 위해 FXML 파일에서 정의한 UI 객체에 fx:id를 지정하고, Java 코드에서 @FXML 어노테이션으로 해당 객체를 참조할 수 있습니다. 아래는 FXML 파일에 fx:id를 지정하고 Java 코드에서 해당 객체를 사용하는 예제입니다.

<!-- Sample.fxml -->
<AnchorPane prefHeight="400" prefWidth="600" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
    <Button layoutX="264.0" layoutY="182.0" onAction="#handleButtonAction" text="Click Me!" fx:id="myButton" />
</AnchorPane>
import javafx.fxml.FXML;
import javafx.scene.control.Button;

public class Controller {

    @FXML
    private Button myButton;

    @FXML
    private void handleButtonAction(ActionEvent event) {
        myButton.setText("Clicked!");
    }
}

위의 예제에서 FXML 어노테이션을 사용하여 myButton이라는 Button 객체를 참조하고, 해당 버튼이 클릭되었을 때 텍스트를 변경하는 이벤트 핸들러를 작성했습니다.

결론

JavaFX에서는 자바코드와 FXML 파일을 함께 사용하여 UI를 개발할 수 있습니다. FXML 파일은 UI의 구조와 속성을 정의하고, 자바 코드는 해당 UI를 조작하는 등의 작업을 수행합니다. 이를 통해 UI와 로직을 분리하고, 유지보수성을 높일 수 있습니다.