【发布时间】:2011-11-28 15:20:51
【问题描述】:
对大多数人来说,我似乎有相反的问题。我有以下非常标准的代码来查看用户是否想在关闭窗口之前进行一些保存:
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent ev) {
boolean close = true;
// check some files, asking if the user wants to save
// YES and NO handle OK, but if the user hits Cancel on any file,
// I want to abort the close process
// So if any of them hit Cancel, I set "close" to false
if (close) {
frame.dispose();
System.exit(0);
}
}
});
无论我尝试什么,当我退出 windowClosing 时,窗口总是关闭。将 WindowAdapter 更改为 WindowListener 没有任何区别。奇怪的是,文档明确指出“如果程序在处理此事件时没有明确隐藏或处置窗口,则窗口关闭操作将被取消”,但它对我来说不起作用。还有其他方法可以处理框架上的 x 吗? TIA
【问题讨论】:
-
我敢打赌,如果您通过创建sscce 尽可能简化您的问题,那么您肯定会发现某个地方的错误。如果它没有变得明显,那么您可以发布 sscce,我们可以对其进行处理,以便更好地为您提供帮助。
-
根据提供的代码,您设置
close变量的逻辑可能是错误的。由于它默认为 true ,因此您似乎没有正确重置它。你打印出 if 语句之前的值了吗? -
我刚刚遇到了另一种情况,如果使用 Netbeans (8.0),可能会导致这些症状。 Design View 自动生成的代码将添加自己的默认关闭操作,该操作可以覆盖人工生成代码中指定的行为。这可以在 JDialog 属性框中进行编辑。 (尽管这不是保罗问题的答案,但为寻求类似问题解决方案的后代留下此评论。)
标签: java swing jframe windowlistener