为了验证用户所做的所有更改都已保存,我想拦截退出/退出JavaFX应用程序。
是否有一种常见的方式来实现这一目标,例如重写事件或者还有更多内容?
答案 0 :(得分:2)
正如他们已经说过的,这是通过拦截WindowEvent.WINDOW_CLOSE_REQUEST
来完成的。然后,您可以致电event.consume()
停止暂停。
这是如何捕获事件并显示确认对话框的示例。根据用户的选择,您可以根据需要进行序列化操作。
primaryStage.setOnCloseRequest(event -> {
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
alert.initOwner(primaryStage);
alert.initModality(Modality.APPLICATION_MODAL);
alert.setHeaderText("Exit");
alert.setContentText("Do you want to exit?");
alert.getDialogPane().getButtonTypes().setAll(ButtonType.OK, ButtonType.NO);
Optional<ButtonType> optional = alert.showAndWait();
if(optional.isPresent() && optional.get() == ButtonType.OK) {
// save data
return;
}
event.consume();
});
为了完成实现,您需要实现一个逻辑,以便从控件中清除退出应用程序。例如,从“文件”菜单中选择时 - &gt;关。捕获事件时,必须运行WindowEvent.WINDOW_CLOSE_REQUEST
来欺骗退出逻辑。
closeMenuItem.setOnAction(event -> {
Window window = menuBar.getScene().getWindow();
window.fireEvent(new WindowEvent(window, WindowEvent.WINDOW_CLOSE_REQUEST));
});
答案 1 :(得分:0)
在类应用程序中,可以覆盖stop method。