Window Close Listener和setDefaultCloseOperation

时间:2015-05-25 15:19:46

标签: java swing jframe default windowlistener

我对swing窗口侦听器和默认关闭操作之间的关系有疑问。当我处理以下情况时会出现问题:

我为WindowAdapter添加一个窗口监听器(JFrame用于监听器),并覆盖windowClosing函数:如果用户关闭窗口,将弹出一个对话框确认,如果用户选择CANCEL选项,则直接返回。但是,当我测试代码并在关闭窗口时选择CANCEL时,框架窗口仍然关闭(或者可能只是不可见,因为Java图标仍在任务栏中)。

然后我用DO_NOTHING_ON_CLOSE添加默认的关闭选项,测试行为相同,框架窗口没有关闭,这就是我的预期。

setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

然后我用EXIT_ON_CLOSE更改默认关闭选项,使用相同的测试行为,框架窗口直接关闭(这次Java图标也消失了)。

这让我很困惑。是否意味着窗口监听器只能定义窗口关闭时要执行的操作,但无法确定是否关闭窗口?或者我需要覆盖其他功能?

1 个答案:

答案 0 :(得分:2)

窗口侦听器只是一个侦听器。除非您实际更改windowClosing()代码中的默认关闭操作,否则它不会影响默认关闭操作。

我用:

frame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

作为创建框架时的默认值。然后在windowClosing(...)方法中,如果用户确认关闭了框架,我将更改默认值:

frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

查看Closing an Application以获取更多信息和更完整的示例代码。