为setDefaultCloseOperation创建自定义操作?

21

我希望我的Java应用程序在用户按下“关闭”按钮时调用自己定制的函数。据我所见,可能没有方法可以实现这一点,因为 setDefaultCloseOperation 没有任何重载。

你有什么想法可以实现这个功能吗?

4个回答

37

也许这个可以,但在此之前请阅读由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);

31

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

然而,所有答案都不完整,因为它们忘记了你可能还想添加:

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(...);

通过使用dispose()方法来控制窗口关闭过程,可以使你的代码完全控制窗口关闭过程,窗口不会自动关闭,除非你告诉它这样做。这样你就可以提示用户是否确认关闭窗口。

Closing an Application具有简单的API,可让你创建一个简单的操作,在窗口关闭时执行。它为你管理关闭操作和窗口监听器代码。


8
您可以为窗口添加一个窗口监听器:window listener
frame.addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent evt) {
     onExit();
   }
  });

...
public void onExit() {
  System.err.println("Exit");
  System.exit(0);
}

4
您可以向您的框架添加一个WindowListener(例如,请参见此处)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接