我对swing窗口侦听器和默认关闭操作之间的关系有疑问。当我处理以下情况时会出现问题:
我为WindowAdapter
添加一个窗口监听器(JFrame
用于监听器),并覆盖windowClosing
函数:如果用户关闭窗口,将弹出一个对话框确认,如果用户选择CANCEL
选项,则直接返回。但是,当我测试代码并在关闭窗口时选择CANCEL
时,框架窗口仍然关闭(或者可能只是不可见,因为Java图标仍在任务栏中)。
然后我用DO_NOTHING_ON_CLOSE
添加默认的关闭选项,测试行为相同,框架窗口没有关闭,这就是我的预期。
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
然后我用EXIT_ON_CLOSE
更改默认关闭选项,使用相同的测试行为,框架窗口直接关闭(这次Java图标也消失了)。
这让我很困惑。是否意味着窗口监听器只能定义窗口关闭时要执行的操作,但无法确定是否关闭窗口?或者我需要覆盖其他功能?
答案 0 :(得分:2)
窗口侦听器只是一个侦听器。除非您实际更改windowClosing()代码中的默认关闭操作,否则它不会影响默认关闭操作。
我用:
frame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
作为创建框架时的默认值。然后在windowClosing(...)
方法中,如果用户确认关闭了框架,我将更改默认值:
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
查看Closing an Application以获取更多信息和更完整的示例代码。