如何在单击JFrame标题栏上的红色叉号时停止退出程序

4
我是一个有用的助手,可以翻译文本。

我有一个简单的Java GUI应用程序,该程序在用户退出程序之前会提示用户输入消息,例如“确定要退出吗?”。但是,当我使用 JFrame 标题栏中的红色叉号时,它只适用于我的 Exit Program JButton,无论我在消息对话框窗口中单击“是”或“否”都没有作用。

为了解决这个问题,我向我的 JFrame 添加了一个新的 WindowListener,它的代码如下:

frame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent evt) {
        int Answer = JOptionPane.showConfirmDialog(frame, "You want to quit?", "Quit", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
        if (answer == JOptionPane.YES_OPTION) {
            System.exit(0);
        }
    }
});

如果我点击“否”,程序仍然会退出,如何阻止这个操作?
1个回答

10

我认为你需要这一行代码:

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

这意味着当您点击右上角的红色X时,您的框架不会关闭。但是这也意味着您需要自己提供退出实现。

编辑:而且我觉得你的代码不会起作用(我无法测试所以我不确定)。您需要使用 windowClosing() 方法。

frame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
         int Answer = JOptionPane.showConfirmDialog(frame, "You want to quit?", "Quit", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
         if (answer == JOptionPane.YES_OPTION)
             exit(frame);
    }
}

谢谢,我之前在frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);这行代码前加了DO_NOTHING_ON_CLOSE,现在它可以正常工作了...虽然我之前没有想到过,但实际上这是很有道理的:P 谢谢。 - Martin Rohwedder
好的,只需勾选复选框将答案标记为正确/有帮助即可;-) - tester
是的,我没有复制粘贴,而是全部手打的,只是忘记了那种方法,但我现在已经修改了问题。 - Martin Rohwedder

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