JavaFX警报对话框取消按钮

时间:2015-06-11 20:35:56

标签: java javafx

我创建了一个JavaFX警告对话框来提示用户,询问他们是否要在关闭应用程序之前保存控制台的输出。

我有是,没有选择照顾。如果用户单击取消,我希望它只关闭对话框并保持一切打开。截至目前,如果我点击取消它将关闭GUI。

这是我的代码,用于覆盖GUI上的关闭按钮。

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>()
    {
        @Override
        public void handle(WindowEvent event)
        {
            Alert alert = new Alert(AlertType.WARNING);
            alert.setTitle("Warning");
            alert.setHeaderText("Would You Like To Save Your Console Output?");
            alert.setContentText("Please choose an option.");

            ButtonType yesButton = new ButtonType("Yes");
            ButtonType noButton = new ButtonType("No");
            ButtonType cancelButton = new ButtonType("Cancel", ButtonData.CANCEL_CLOSE);

            alert.getButtonTypes().setAll(yesButton, noButton, cancelButton);

            Optional<ButtonType> result = alert.showAndWait();
            if(result.get() == yesButton)
            {
                Main.setConsoleVisible();
                frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            }
            else if(result.get() == noButton)
            {
                System.exit(0);
            }
            else if(result.get() == cancelButton)
            {

            }  
        }
    });

3 个答案:

答案 0 :(得分:2)

“yesButton”和“cancelButton”中的if-blocks都使用CloseRequest WindowEvent

else if(result.get() == cancelButton)
{
    event.consume();
}

使用Platform.exit()代替System.exit(0)

答案 1 :(得分:0)

来自documentation for onCloseRequest

  

当有外部请求关闭此窗口时调用。已安装的事件处理程序可以通过使用已接收的事件来阻止窗口关闭。

请注意,如果用户在未按任何按钮的情况下关闭警告对话框,result.get()将抛出异常。 Dialog documentation彻底解释了这一点。

答案 2 :(得分:0)

使用primaryStage.close();代替System.exit(0);