반응형
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(); 메소드를 호출해서 발생한 이벤트를 버려버리게 됩니다.
반응형
'Programing > JavaFX' 카테고리의 다른 글
JavaFx scene builder TableView 표출 및 갱신 방법 (1) | 2021.03.26 |
---|---|
JavaFX favicon, icon 적용하는 방법 (0) | 2019.10.31 |
JavaFX + SceneBuilder TextFlow 스크롤 추가 및 포커스 설정 (0) | 2019.10.29 |
JavaFX Text style 변경 TextArea, TextFrow (0) | 2019.10.28 |
JavaFX UI변경하기, 변경시 주의점. Not on FX application thread (0) | 2019.10.28 |
댓글