JavaFX的8:拦截器件的应用“退出”(JavaFX 8: Intercepting appica

2019-09-28 01:40发布

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

是否有一个共同的方式对去实现这个像覆盖的事件还是有更多的东西?

Answer 1:

由于他们已经说过,这是通过拦截做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));
});


Answer 2:

在类应用存在停止方法 ,你都不可能覆盖。



文章来源: JavaFX 8: Intercepting appication “exit”