为了验证用户所做的所有更改是否已保存,我想拦截 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();
});
为了使实现完整,您需要实现一个逻辑,以便从控制中明确退出应用程序。例如,从“文件”菜单中选择 ->“关闭”时。捕获事件时,您必须运行WindowEvent.WINDOW_CLOSE_REQUEST
欺骗退出逻辑。
closeMenuItem.setOnAction(event -> {
Window window = menuBar.getScene().getWindow();
window.fireEvent(new WindowEvent(window, WindowEvent.WINDOW_CLOSE_REQUEST));
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)