java中的关闭窗口事件
我添加了一个窗口状态侦听器,如下所示:java中的关闭窗口事件,java,user-interface,swing,window,Java,User Interface,Swing,Window,我添加了一个窗口状态侦听器,如下所示: this.addWindowStateListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { ExitAction.getInstance().actionPerformed(null); } }); 但是,当我使用X关闭按钮时,不会调用该事件。 我认为这与netbean jdesktop框架有关。
this.addWindowStateListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
ExitAction.getInstance().actionPerformed(null);
}
});
但是,当我使用X关闭按钮时,不会调用该事件。
我认为这与netbean jdesktop框架有关。但我找不到问题所在。
谢谢你的帮助 通常使用WindowListener进行此操作
查看我使用的一种方法,尽管我必须承认我从未在Netbeans上尝试过,因为我没有使用IDE。正如Java文档所说,要真正关闭窗口,侦听器应该调用窗口的dispose或setVisible(false)方法。
窗口关闭
是窗口侦听器
界面的一部分。使用addWindowListener
而不是addWindowsStateListener
正如其他人指出的,WindowListener是您所追求的。。。但从现在起,在重写方法时应执行此操作:
this.addWindowStateListener(
new WindowAdapter()
{
@Overrides
public void windowClosing(WindowEvent e)
{
ExitAction.getInstance().actionPerformed(null);
}
});
然后,编译器会告诉您什么时候您实际上没有重写一个方法,而是添加了一个新方法(在这种情况下将永远不会被调用)。没有直接回答您的问题(因为已经给出了答案),但我假设您想在退出时退出程序(或者只是隐藏一个窗口)。对于这些情况,有一个较短的解决方案:
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
谢谢大家帮我解决这个问题。我并不完全理解它,但以下代码解决了这个问题:
Frame[] frames = Frame.getFrames();
for(Frame f: frames){
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
ExitAction.getInstance().actionPerformed(null);
}
});
}
看起来框架好像添加了额外的框架。
谢谢,刚刚在我的Swing程序中调试了一个类似的问题。事实证明,这是一个Java bug,当在创建Swing UI之前调用ImageIO时,它会杀死系统UI事件。请参见此处,了解一个最简单的示例-
此错误会阻止系统UI事件(如窗口关闭)传递到Java。+1。请注意,
WindowsStateListener
用于处理窗口最小化或最大化时触发的事件等,但不能关闭。WindowAdapter既是WindowListener,也是WindowsStateListener。这里的问题是,它被添加为WindowsStateListener,因此它作为WindowListener的方法没有被调用。啊,是的,我不知道它实现了比WindowListener更多的功能。真奇怪。。。显然,他们在1.4中增加了这一点。在1.4之前,如果Java有注释,那么我所说的应该是有效的:-)(不删除答案,因为它作为一般规则是有效的,只是不适用于这种特定情况)