Programing/JavaFX

JavaFX window 종료(x) 버튼 클릭 시 경고창 띄우는 방법 및 이벤트 처리

리커니 2019. 11. 8.
반응형

 

JavaFX window 종료(x) 버튼 클릭 시 경고창 띄우는 방법 및 이벤트 처리

 

 

위와 같이 경고창을 띄우기 위해서는 Alert class를 활용합니다. 

 

Alert alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle("프로그램 종료");
alert.setHeaderText("잠깐! 서버를 종료하시겠습니까?");
alert.setContentText("OK 버튼 클릭 시 서버가 종료됩니다.");
alert.showAndWait();

 

이제 이 코드를 어디에 추가하냐 인데,

window 창의 x 버튼 클릭 이벤트는 stage의 setOnCloseRequest 메소드를 활용해 처리할 수 있습니다.

main stage를 핸들링 하는 부분에 코드를 추가합니다. 

 

stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
	@Override
	public void handle(WindowEvent evt) {
    	//이벤트 코드
    }
});

 

window창의 x버튼을 클릭했을 때 경고창을 띄우는 것이니, 위의 두 코드를 조합해야겠죠?

 

stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
	@Override
	public void handle(WindowEvent evt) {
		Alert alert = new Alert(AlertType.CONFIRMATION);
		alert.setTitle("프로그램 종료");
		alert.setHeaderText("잠깐! 서버를 종료하시겠습니까?");
		alert.setContentText("OK 버튼 클릭 시 서버가 종료됩니다.");
		alert.showAndWait();
	}
});

 

이제 window 창의 x 버튼을 클릭했을 때 경고창이 나타납니다.

하지만 ok를 누르던 cancel을 누르던 종료가 되버리죠.

이제 ok버튼과 cancel 버튼의 이벤트를 구분하는 코드를 추가하도록 하겠습니다.

 

stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
	@Override
	public void handle(WindowEvent evt) {
		Alert alert = new Alert(AlertType.CONFIRMATION);
		alert.setTitle("프로그램 종료");
		alert.setHeaderText("잠깐! 서버를 종료하시겠습니까?");
		alert.setContentText("OK 버튼 클릭 시 서버가 종료됩니다.");
		Optional<ButtonType> result = alert.showAndWait();
		if(result.get() == ButtonType.OK) {
			LOGGER.info("서버 종료");
		}else if(result.get() == ButtonType.CANCEL) {
        	LOGGER.info("서버 종료 취소");
			evt.consume();
		}
	}
});

 

 

Optional 의 버튼 타입으로 결과 값을 받고 그 타입이 ok면 뭐 그냥 종료.

cancel 이면 evt.consume(); 메소드를 호출해서 발생한 이벤트를 버려버리게 됩니다.

 

 

반응형

댓글

💲 추천 글