【问题标题】:When a JFrame is Closed [duplicate]当 JFrame 关闭时[重复]
【发布时间】:2014-03-24 10:19:18
【问题描述】:

我有一个JFrame,我想知道何时单击该JFrame 的关闭按钮。当JFrame 关闭时,我的整个项目并没有关闭,所以我希望能够知道用户何时关闭了那一帧。

我尝试过使用像 !f.isShowing!mfisActive() 这样的方法,但是当我关闭框架时,我想要发生的事情并没有.

【问题讨论】:

  • 我不想关闭它,我想知道用户何时关闭它。
  • 为了清楚起见,您是否只是遇到框架关闭时运行未结束的问题,或者您想在框架关闭时执行某些操作?因为您的问题中都提到了两者。
  • 我不得不怀疑这是否真的不是伪装的XY Problem,如果您真正想要的是使用模态 JDialog。如果您告诉我们更多的背景故事,我们也许可以给您一个更好的答案。

标签: java swing jframe


【解决方案1】:
import javax.swing.JOptionPane;
frame.addWindowListener(new java.awt.event.WindowAdapter() {
    @Override
    public void windowClosing(java.awt.event.WindowEvent windowEvent) {
        if (JOptionPane.showConfirmDialog(frame,...) ...) {
            // ...
            System.exit(0);
        }
    }
});

【讨论】:

  • @dic19 垃圾,System.exit 指示 JVM 以受控和已知的方式终止,并且在所有非守护线程也终止之前不会终止。
  • @MadProgrammer 我猜我完全错了我的 Java 生活:P
  • @dic19 我知道这种感觉 ;)
  • 对不起@pospeq 我已经撤销了我不必要/不正确的投票。
【解决方案2】:

如果你不想在框架关闭时做任何特别的事情,你可以使用setDefaultCloseOperation来改变JFrame的方式

EXIT_ON_CLOSE

退出应用程序默认的窗口关闭操作。如果一个窗口有 这设置为关闭操作,并在小程序中关闭,a 可能会抛出 SecurityException。建议你只使用这个 在应用程序中。

HIDE_ON_CLOSE

隐藏窗口默认关闭窗口操作

DISPOSE_ON_CLOSE

dispose-window 默认的窗口关闭操作。注意:当最后 Java虚拟机(VM)内的可显示窗口被配置 的,VM 可能会终止。有关更多信息,请参阅 AWT 线程问题 信息。

【讨论】:

  • 1+,但我猜他真的想要一个模态 JDialog,因为他想知道窗口何时关闭并且不希望应用程序关闭。但在他告诉更多人之前,谁知道呢?
  • @HovercraftFullOfEels 这有点像我的想法,因此是开场白的原因
【解决方案3】:

JFrame 关闭时,我的整个项目并没有关闭...

一个常见的原因是当你声明一个 JFrame 时,你应该调用 JFrame 的这个方法来让它在你按下'x'按钮时关闭:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多