7주차 - javaFX (6) action

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

오늘의 목표

01. 객체에 메서드를 실행하는 액션을 적용해보자


javaFX (6)에서는 객체에 ID를 지정하고 ID를 이용하여 속성을 부여하는 것을 해보았습니다.

여기서는 객체에 메서드를 실행하는 액션을 부여하는 것을 해볼것입니다.

 

01. Main 클래스 코드
02. Controller 클래스 코드
03. fxml 코드04. 실행 화면

01. Main 클래스의 코드

public class Ex3 extends Application {

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

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

02. 컨트롤러 클래스의 코드

public class Ex3Controller implements Initializable {

	@FXML
	private Button loginButton;
	@FXML
	private TextField idField;
	@FXML
	private PasswordField pwField;

	private Alert infoAlert = new Alert(AlertType.INFORMATION);

	@Override
	public void initialize(URL location, ResourceBundle resources) {
	}
	
	// id, pw 길이 확인하는 메소드
	public boolean lengthCheck(String id, String pw) {

		boolean check = false;
		if (id.length() > 10) {
			infoAlert.setContentText("아이디는 10글자 이하 입니다.");
			idField.clear();
			idField.requestFocus();
			check = true;
		} else if (pw.length() > 10) {
			infoAlert.setContentText("비밀번호는 10글자 이하 입니다.");
			pwField.clear();
			pwField.requestFocus();
			check = true;
		}
		infoAlert.show();
		return check;

	}

	// id, pw 확인하는 메서드
	public void check() {
		String id = "", pw = "";
		id = idField.getText();
		pw = pwField.getText();

		if (lengthCheck(id, pw)) {
			return;
		}

		System.out.println("아이디 : " + id);
		System.out.println("비밀번호 : " + pw);

		String userId = "admin";
		String userPw = "1234";

		infoAlert.setTitle("메시지");
		infoAlert.setHeaderText("메시지");

		if (id.isEmpty()) {
			infoAlert.setContentText("idTextField를 입력해야 합니다");
			idField.requestFocus();
		} else if (pw.isEmpty()) {
			infoAlert.setContentText("pwTextField를 입력해야합니다");
			pwField.requestFocus();
		} else {
			if (userId.equals(id) && userPw.equals(pw)) {
				infoAlert.setContentText("성공");
			} else {
				infoAlert.setContentText("아이디 혹은 패스워드가 틀렸습니다");
				idField.clear();
				pwField.clear();
				idField.requestFocus();
			}
		}

		infoAlert.show();

	}

	// 엔터버튼 눌렸을때 자동으로 check() 가 호출되도록 하는 메소드
	public void onkeypress() {

		idField.setOnKeyPressed(event -> {
			switch (event.getCode()) {
			case ENTER:
				check();
				break;
			default:
				break;
			}
		});
		pwField.setOnKeyPressed(event -> {
			switch (event.getCode()) {
			case ENTER:
				check();
				break;
			default:
				break;
			}
		});
	}

	// 로그인 버튼 클릭하면 호출되는 메서드
	public void loginButtonMethod() {
		check();
	}
}

03. 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.Ex3Controller">
   <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" onAction="#onkeypress" 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" onAction="#onkeypress" 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" onAction="#loginButtonMethod" 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>

04. 실행화면

로그인 버튼에 액션을 걸고 해당 메서드가 작동했을때의 다양한 경우