我创建了一个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)
{
}
}
});
答案 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);