JavaFX 8 : Intercepting appication "exit"

标签 javafx javafx-8

为了验证用户所做的所有更改是否已保存,我想拦截 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/

相关文章:

java - 在 libGDX 中是否有 JavaFX 的 PathTransition 等价物?

java - 如何在 JavaFX 上使用 checkBox 选择行?

JavaFX .如何在表格底部制作一行求和(总行)?

css - Javafx:如何在 css 中更改 .chart-legend-item-symbol 的大小?

css - 如何在 JavaFX 的 tabPane 中删除这个额外的空间?

java - 在javafx中禁用节点而不禁用其子节点

java - JFXtras 添加监听器以拖动约会

java - PropertyValueFactory 是否需要模型中的 valueProperty 方法?

java - 如何将数据从 JavaScript 传递到 JavaFX

JavaFX TextArea 从坐标获取插入符位置