我想让我的Java应用程序在按下“关闭”十字按钮时调用我自己的自定义函数。据我所知,可能没有办法,因为setDefaultCloseOperation
根本没有重载。
知道如何实现这一目标吗?
答案 0 :(得分:35)
也许是这个,但在此之前阅读教程WindowListener由霍华德发布,有一些/另一个选项
WindowListener exitListener = new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
int confirm = JOptionPane.showOptionDialog(
null, "Are You Sure to Close Application?",
"Exit Confirmation", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE, null, null, null);
if (confirm == 0) {
System.exit(0);
}
}
};
frame.addWindowListener(exitListener);
答案 1 :(得分:28)
以上所有建议都是正确的,因为您需要使用WindowListener。
然而,所有答案都不完整,因为他们忘记提及您可能还想添加:
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(...);
这将允许您的代码完全控制窗口关闭过程,因为窗口不会自动关闭,除非您告诉它(通常通过在框架上使用dispose()方法)。这允许您向用户发出确认以关闭窗口的信息。
Closing an Application有一个简单的API,允许您创建一个在窗口关闭时执行的简单Action。它为您管理关闭操作和窗口侦听器代码。
答案 2 :(得分:8)
您可以为框架添加window listener:
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
onExit();
}
});
...
public void onExit() {
System.err.println("Exit");
System.exit(0);
}
答案 3 :(得分:4)
您可以在框架中添加WindowListener
(请参阅例如here)。