防止隐藏主对话框

时间:2014-01-14 19:27:25

标签: events event-handling javafx javafx-2 javafx-8

我正在尝试阻止关闭我的应用程序,但是查看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();
            }
        });
    }
}

我有什么问题吗?还有另一种方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

GUI用户触发

CloseRequest个事件,并以编程方式调用Hide个事件。因此,您可以控制hide事件调用的代码流。实现一些包装工具类,如StageUtil.hideRequest(stage)或扩展您自己的stage.myHide()等。hiding事件似乎无法消耗,我认为这是一个正确的决定设计hidinghidden事件的目的在他们的javadocs中描述,没有提及消费它们。

答案 1 :(得分:0)

尝试在控制器上实现一个窗口事件处理程序:

public class XYZ implements EventHandler<WindowEvent>
{
    @Override
    public void handle( WindowEvent closeEvent )
    {
        closeEvent.consume();
    }
}

或尝试在AppBase类上实现它。