본문 바로가기
자바

자바fx 패스워드를 입력받고 기존창을 닫으면서 새로운 창을열때 [김철수홍길동]

by 세상 모든 것 들은 그 자신을 위해 존재한다. 2021. 1. 30.

프로그램을 만들다 보면 사용자를 선별해야 될 경우가 늘 있습니다.

이번 경우의 예제는 정해진 비밀번호를 입력받아 맞는 경우에만 프로그램을 시작하는 예제  입니다.

 

사용 예제 ) 코드를 복붙 하여 실행해 보시기 바랍니다.

설명은 주석 부분에 있습니다.

먼저 처음 시작하는 Main.java 파일입니다.

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

public class Main extends Application {


	@Override
	public void start(Stage primaryStage) {
		try {
			//시작할때 로그인 준비창을 먼저 띄움니다.
			Parent root = FXMLLoader.load(getClass().getResource("pass.fxml"));
			Scene scene = new Scene(root);
			primaryStage.setScene(scene);
			
			//창을 항사위에 표시함
			primaryStage.setAlwaysOnTop(true);
			primaryStage.show();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

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

}

 

 

두 번째 예제는 프로그램 시작 전에 비밀번호 창을 띄우는 간단한  

pass.fxml 파일입니다.

복붙 하여 실행해 보시기 바랍니다.

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

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.PasswordField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>

<AnchorPane prefHeight="244.0" prefWidth="350.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="PassHandler">
   <children>
      <Button fx:id="myButton" layoutX="225.0" layoutY="106.0" mnemonicParsing="false" onAction="#Login" text="Start">
         <font>
            <Font size="18.0" />
         </font>
      </Button>
      <Label fx:id="l" layoutX="45.0" layoutY="26.0" prefHeight="69.0" prefWidth="229.0" text="패스워드를 입력하세요." />
      <PasswordField fx:id="pw1" layoutX="34.0" layoutY="106.0" prefHeight="33.0" prefWidth="154.0" />
   </children>
</AnchorPane>

 

이번 예제는 pass.fxml 즉 처음으로 실행되어서 비밀번호를 검사하는 창의 핸들러 파일입니다.

역시 복붙 하여 실행해 보시기 바랍니다.

파일명 PassHandler.java입니다.

import java.io.IOException;

import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.ProgressIndicator;
import javafx.stage.Stage;

public class PassHandler {

	@FXML
	private Label l;
	
	//패스워드 필드 
    @FXML
    private PasswordField pw1;
    
	@FXML
	private Button myButton;
	
	public void Login(ActionEvent event) throws Exception {

		//패스워드를 체크하는 함수 정의는 아랫부분에 습니다
		checkPassword();
		
		//패스워드가 맞으면 기존창을 닫습니다. 함수정의는 아랫부분에 있습니다.
		closeStage();
		
		
		
		//새로운 창인 Main.fxml을 시작합니다.
		
		Stage primaryStage = new Stage();
		Parent root;
		try {
			root = FXMLLoader.load(getClass().getResource("Main.fxml"));
			Scene scene = new Scene(root);
			primaryStage.setScene(scene);
			primaryStage.show();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
	}

	
	
	// ---------------------------기존창 닫는함수
	public void closeStage() {
		Stage stage11 = (Stage) myButton.getScene().getWindow();
		Platform.runLater(() -> {
			stage11.close();
		});
	}
	
	// ---------------------------패스워드 확인함수
	//패스워드가 맞으면 프로그램을 계속진행하고 틀리면 바로종료하는 함수입니다.
	public void checkPassword() {
		
		//패스워드는 1234로 정했습니다.
		String Password = "1234"; 
		if(pw1.getText().equals(Password)) {
			System.out.println("패스워드 맞음");
		}else {
			System.out.println("패스워드틀림 ");
			
			//현재프로그램을 끝낸다는 부분입니다.
			Platform.exit();
			
		}
					

	}
	

}

 

 

마지막으로 비밀번호 창이 닫히고 실행될 프로그램의 창입니다.

실제는 본 프로그램의 fxml파일이 오면 되겠습니다.

여기에서는 결과만 보여드리기 위한 파일이라서 내용은 없습니다.

main.fxml 파일입니다.

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

<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>

<AnchorPane prefHeight="510.0" prefWidth="616.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="MainController">
   <children>
      <Label layoutX="339.0" layoutY="449.0" text="Main Windows">
         <font>
            <Font size="18.0" />
         </font>
      </Label>
   </children>
</AnchorPane>

 

간단하게 패스워드를 선정해서 예제를 작성했습니다.

실전에서는 DB에서 패스워드를 가져다가 비교하거나

파일에 저장된 패스워드를 비교한 후에 결과를 처리합니다.

과정이 조금 길어질 뿐 원리는 같습니다.

아래는 실행 동영상입니다.

 

세상 모든 것들은 그 자신을 위해 존재한다.

728x90
반응형

댓글