Hello, Freakin world!

[JavaFX] FXML 상의 컴포넌트를 Java Controller 의 필드에 바인딩하기 본문

프로그래밍 언어/Java

[JavaFX] FXML 상의 컴포넌트를 Java Controller 의 필드에 바인딩하기

johnna_endure 2020. 1. 25. 15:47

이해를 돕기 위한 예제

다음과 같은 fxml 파일이 있다고 하자.

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ListView?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.RoomListController">
   <children>
      <ListView id="roomList" fx:id="roomList" layoutX="38.0" layoutY="29.0" prefHeight="324.0" prefWidth="299.0" />
      <Button id="createButton" layoutX="378.0" layoutY="29.0" mnemonicParsing="false" onAction="#createRoom" prefHeight="69.0" prefWidth="111.0" text="생성" />
      <Button id="joinButton" layoutX="378.0" layoutY="121.0" mnemonicParsing="false" prefHeight="69.0" prefWidth="111.0" text="참가" />
   </children>
</AnchorPane>

AnchorPane 태그의 fx:controller 속성에 이미 컨트롤러 클래스가 바인딩되어 있는 상황이다.
복잡해보이지만 다른 것들은 중요하지 않다.

 

해당 ListView 컴포넌트를 바인딩한 컨트롤러 클래스의 필드로 바인딩하고 싶다고 하자.
이때, fxml에서 필요한 조치는 ListView에 fx:id 속성을 부여하고, Controller 클래스에서 이 id와 같은 이름과 타입의 필드를 만드는 것이다.
쉽게 말해 다음의 필드를 만드는 것이다.

import javafx.fxml.FXML;
import javafx.scene.control.ListView;

public class RoomListController {

    public ListView<String> roomList;
}
Comments