我正在尝试阻止关闭我的应用程序,但是查看JavaFX文档(并且在一些实现之后)我注意到setOnCloseRequest()仅在用户尝试使用关闭按钮或ALT +关闭窗口时才有效F4快捷方式。因为我需要拦截内部尝试的关闭,我使用setOnHiding(),这样我可以捕获关闭应用程序主对话框的所有尝试,但是我仍然无法阻止关闭:
public abstract class AppBase extends Application {
public void init(){
dialogoPrincipal.getPainel().getScene().getWindow().setOnHiding(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
event.consume();
}
});
}
}
我有什么问题吗?还有另一种方法可以解决这个问题吗?
答案 0 :(得分:3)
CloseRequest
个事件,并以编程方式调用Hide
个事件。因此,您可以控制hide
事件调用的代码流。实现一些包装工具类,如StageUtil.hideRequest(stage)
或扩展您自己的stage.myHide()
等。hiding
事件似乎无法消耗,我认为这是一个正确的决定设计。 hiding
和hidden
事件的目的在他们的javadocs中描述,没有提及消费它们。
答案 1 :(得分:0)
尝试在控制器上实现一个窗口事件处理程序:
public class XYZ implements EventHandler<WindowEvent>
{
@Override
public void handle( WindowEvent closeEvent )
{
closeEvent.consume();
}
}
或尝试在AppBase类上实现它。