为setDefaultCloseOperation创建自定义操作?

pro*_*spk 19 java user-interface swing windowlistener

我想让我的Java应用程序在按下"关闭"十字按钮时调用我自己的自定义函数.据我所知,可能没有办法,因为setDefaultCloseOperation根本没有超载.

知道如何实现这一目标吗?

mKo*_*bel 36

也许是这一个,但在此之前阅读由Howard发布的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);
Run Code Online (Sandbox Code Playgroud)


cam*_*ckr 29

以上所有建议都是正确的,因为您需要使用WindowListener.

然而,所有的答案都是不完整的,因为他们忘记提到你可能还想添加:

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(...);
Run Code Online (Sandbox Code Playgroud)

这将允许您的代码完全控制窗口关闭过程,因为窗口不会自动关闭,除非您告诉它(通常通过在框架上使用dispose()方法).这允许您提示用户确认是否关闭窗口.

关闭应用程序有一个简单的API,允许您创建一个在窗口关闭时执行的简单Action.它为您管理关闭操作和窗口侦听器代码.


kha*_*hik 8

您可以为框架添加窗口侦听器:

frame.addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent evt) {
     onExit();
   }
  });

...
public void onExit() {
  System.err.println("Exit");
  System.exit(0);
}
Run Code Online (Sandbox Code Playgroud)