【问题标题】:Confirm program quit when cmd + Q is pressed按下 cmd + Q 时确认程序退出
【发布时间】:2019-03-12 01:00:00
【问题描述】:

我有一个带有 JFrame 的程序,我使用 WindowListener 来关闭程序。我使用以下方法提示保存程序中所做的更改的消息:

    public void windowClosing(WindowEvent e) {
        if (condition) {
            System.exit(0);
        }

但是,当我按下 cmd + Q 时,我的程序将退出,而我无法选择保存。无论我是通过窗口 X 还是通过键盘短命令关闭程序,是否有一种聪明的方法可以确保在关闭程序之前有条件?或者我需要为此创建一个 KeyEvent 吗?

【问题讨论】:

  • regardless if I close it through the window X or through my keyboard short commands? "cmd + Q" 听起来像 Mac 解决方案?在 Windows 中,您将使用分配给系统菜单中的 Exit 菜单项的键盘加速键来关闭窗口。请参阅Closing an Application 了解适用于 Windows 的基本解决方案,无论您是单击“X”还是使用键盘加速器。不知道它在 Mac 中的工作方式是否有所不同。

标签: java swing jframe windowlistener system.exit


【解决方案1】:

您需要更改 JFrame 上的 DefaultCloseOperation,然后在 windowClosing 事件(或上面显示的 System.exit(0) 上)中 dispose() 框架。这是一个简单的工作示例:

JFrame f = new JFrame();
f.setPreferredSize(new Dimension(300, 300));
f.pack();
f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
f.addWindowListener(new WindowAdapter() {
   @Override
   public void windowClosing(WindowEvent we) {
      if (condition) {
         f.dispose();
      }
   }
});
f.setVisible(true);

这样所有的关闭操作都会使用你的条件。

【讨论】:

    【解决方案2】:

    但是,当我按 cmd + Q 时,

    我相信这是您从命令行输入的键击?

    如果是这样,您也许可以使用 Runtime 类中的 addShutDownHook(...) 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-09
      • 2021-04-16
      • 1970-01-01
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      相关资源
      最近更新 更多