2014-01-14 82 views
1

我试图防止关闭我的应用程序,但看着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

请问你为什么要有效地阻止应用程序的终止? – Alexandre

+0

@PeekaySwitch根据用户的任务,应用程序在尝试关闭时会要求确认。 – brevleq

回答

3

CloseRequest事件由GUI用户触发,并且Hide事件以编程方式调用。所以你可以控制hide事件调用的代码流程。实现一些类似StageUtil.hideRequest(stage)的wrapper util类,或者扩展你自己的stage.myHide()等。hiding事件似乎不能被消耗,我认为这是一个正确的决定设计。在他们的javadoc中描述了hidinghidden事件的目的,并且没有提及它们的消耗。

0

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

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

或尝试实施它在你的应用平台类。

+0

我试过了,但问题仍然存在 – brevleq