为了验证用户所做的所有更改是否已保存,我想拦截 JavaFX 应用程序的退出/退出。
是否有一种通用的方法来实现这一目标,例如覆盖事件,或者还有其他方法吗?
最佳答案
正如他们已经说过的,这是通过拦截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();
});
为了使实现完整,您需要实现一个逻辑,以便从控制中明确退出应用程序。例如,从"file"菜单中选择 ->“关闭”时。捕获事件时,您必须运行 WindowEvent.WINDOW_CLOSE_REQUEST 来欺骗退出逻辑。
closeMenuItem.setOnAction(event -> {
Window window = menuBar.getScene().getWindow();
window.fireEvent(new WindowEvent(window, WindowEvent.WINDOW_CLOSE_REQUEST));
});
关于JavaFX 8 : Intercepting appication "exit",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47627945/