Window 关闭监听器并设置默认关闭操作

Window Close Listener And setDefaultCloseOperation

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

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

然后我用 DO_NOTHING_ON_CLOSE 添加默认关闭选项,同样的测试行为,框架 window 没有关闭,这是我所期望的。

setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

然后我把默认的关闭选项改成EXIT_ON_CLOSE,同样的测试行为,框架window直接关闭了(这次Java图标也消失了)。

这让我很困惑。这是否意味着 window 侦听器只能定义 window 关闭时要做什么,而不能确定是否关闭 window?或者我需要覆盖其他功能?

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

我使用:

frame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

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

frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

查看 Closing an Application 了解更多信息和更完整的示例代码。