7주차 - javaFX (5) @FXML, 어노테이션

2022. 9. 7. 19:48Java/javaFX & Scene Builder

SceneBuilder에서 객체들에게 id를 부여하고 id에 속성을 부여하기 위해서는 @FXML 어노테이션을 이용해 줘야합니다.

보통 이런 역할을 담당하는 것을 Controller 라는 이름의 클래스로 따로 만드는 경우가 많습니다.

GUI는 javaFX (1) 에서 봤던 예제와 동일합니다. 하지만 여기서는 Controller 클래스를 만들어서 쓸것입니다.

 

이번의 목표

 

01. Controller 클래스를 만들어서 기능을 나눠보자

02. @FXML 어노테이션을 사용해보자

 

 

// fxml을 사용하기 위해서는 Application을 상속 받아서 사용한다
public class Ex1 extends Application {

	public static void main(String[] args) {
		//메인 메서드 안에서는 아래의 메서드만 사용하게 된다.
		launch(args);
	}

	@Override
	public void start(Stage primaryStage) throws Exception {
		System.out.println("현재 클래스의 위치" + getClass());
		System.out.println("fxml 파일의 위치" + getClass().getResource("Ex1.fxml"));
		// FXML 파일에 구현된 화면을 갖고 오는 행위
		
		FXMLLoader loader = new FXMLLoader(getClass().getResource("Ex1.fxml"));
		Parent form = loader.load();
		
		Scene scene = new Scene(form);
		primaryStage.setTitle("Ex1");
		primaryStage.setScene(scene);
		primaryStage.show();
	}
}

아래는 FXML 파일의 코드

<HBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="210.0" prefWidth="561.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ex2.Ex2Controller">
   <children>
      <VBox alignment="CENTER" prefHeight="164.0" prefWidth="430.0">
         <children>
            <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" spacing="30.0">
               <children>
                  <Label alignment="CENTER" text="ID" />
                  <TextField fx:id="idField" alignment="TOP_LEFT" prefHeight="25.0" prefWidth="250.0" />
               </children>
            </HBox>
            <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" spacing="30.0">
               <children>
                  <Label alignment="CENTER" text="PW" />
                  <PasswordField fx:id="pwField" prefHeight="23.0" prefWidth="248.0" />
               </children>
            </HBox>
         </children>
         <padding>
            <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
         </padding>
      </VBox>
      <VBox alignment="CENTER" prefHeight="210.0" prefWidth="245.0">
         <children>
            <Button fx:id="loginButton" alignment="CENTER" mnemonicParsing="false" prefHeight="117.0" prefWidth="150.0" text="로그인">
               <padding>
                  <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
               </padding>
            </Button>
         </children>
         <padding>
            <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
         </padding>
      </VBox>
   </children>
</HBox>

아래는 컨트롤러 클래스의 코드

public class Ex2Controller implements Initializable {

	// 어노테이션
	@FXML
	private Button loginButton;
	@FXML
	private TextField idField;
	@FXML
	private PasswordField pwField;

	@Override
	public void initialize(URL location, ResourceBundle resources) {
//		System.out.println("Ex2.fxml 화면이 실행되면 이니셜라이즈 메소드는 자동 호출");
		loginButton.setOnAction(event -> {
			String id = "", pw = "";
			id = idField.getText();
			pw = pwField.getText();
			System.out.println("아이디 : " + id);
			System.out.println("비밀번호 : " + pw);
		});
	}
}

여기서는 로그인 버튼과, 아이디 입력칸, 패스워드 입력칸에 ID를 부여하고 각각의 속성을 부여했습니다.


아래는 실행 하고서 아이디와 비밀번호를 입력하고 로그인 버튼을 눌렀을때의 결과

아이디는 ADMIN

비밀번호는 1234를 입력했을때 콘솔에서도 이를 출력해주고 있는 것을 확인할 수 있다.