JavaFX 8:拦截应用程序“退出”

时间:2017-12-04 06:50:00

标签: javafx javafx-8

为了验证用户所做的所有更改都已保存,我想拦截退出/退出JavaFX应用程序。

是否有一种常见的方式来实现这一目标,例如重写事件或者还有更多内容?

2 个答案:

答案 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