【问题标题】:Why WindowListener in a Swing application?为什么在 Swing 应用程序中使用 WindowListener?
【发布时间】:2014-08-01 09:52:53
【问题描述】:

我在 Swing 演示应用程序中看到以下代码:

WindowListener wndCloser = new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
};
addWindowListener(wndCloser);

您为什么要使用此代码来关闭应用程序?没有它会发生什么,和/或是否有其他(更短的)选项可以做到这一点?

【问题讨论】:

  • 这是一个弹出“你真的要退出吗?”的好地方。对话也是如此。

标签: java swing jframe awt windowlistener


【解决方案1】:

为什么要使用这段代码来关闭应用程序?

正如TimH 所说,您可以在退出 Swing 应用程序之前记录信息、写出属性或进行任何其他您想做的清理工作。

下面是关闭窗口代码的正常使用方式。

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
WindowListener wndCloser = new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
        exitProcedure();
    }
};
frame.addWindowListener(wndCloser);


public void exitProcedure() {
    frame.dispose();
    System.exit(0);
}

因为 exitProcedure 是一个单独的方法,您可以从 JMenuItem 操作侦听器执行它,例如“Exit”。

没有它会发生什么,和/或是否有其他(更短的)选项可以做到这一点?

一个更短的选项是

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

如果您未指定任何默认关闭操作,则您的 Swing 应用程序会在您关闭 JFrame 后继续运行。你最终有几十个正在运行的应用程序,什么都不做。

【讨论】:

    【解决方案2】:

    你可以用它来记录一些这样的信息:

    frame.addWindowListener(new WindowAdapter() {
           @Override
           public void windowClosing(WindowEvent e) {
            log.info("Programm exit.");
                System.exit(0);
            super.windowClosed(e);
          }
    });
    

    更短的版本是:

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多