在Java学习GUI时难免会遇到点击框架退出时需要弹出确认提示框的需求,废话不多说,直接上代码,下面是主程序,MenuFrame是继承JFame的类

public class Test_19 { public static void main(String[] args) { EventQueue.
invokeLater(() -> { MenuFrame frame = new MenuFrame(); //不执行任何操作;要求程序在已注册的
WindowListener 对象的 windowClosing 方法中处理该操作 frame.setDefaultCloseOperation(
DO_NOTHING_ON_CLOSE); frame.addWindowListener(new WindowAdapter() { @Override
public void windowClosing(WindowEvent e) { int result = JOptionPane.
showConfirmDialog(null, "确认退出?", "确认", JOptionPane.OK_CANCEL_OPTION, JOptionPane
.INFORMATION_MESSAGE); if(result == JOptionPane.OK_OPTION){ System.exit(0); } }
}); frame.setTitle("第二次作业"); frame.setVisible(true); }); } }

代码是挺短的,逻辑也很简单,首先为frame添加了一个监听窗口事件的方法addWindowListener,然后使用了匿名内部类的方法,,将WindowAdapter的对象传给这个方法,然后在匿名类中重写了windowClosing的方法,接着在方法里面显示了确认的对话框,对确认按钮进行监听,并实现退出。

<>

上面代码亲测有效,不过有些坑我觉得还是得提出来,有些人可能会碰到某些问题,能够弹出确认框,但点击取消按钮后还是退出了程序,其实程序并没有结束,只是被隐藏了起来,如何解决呢?

<>网上很多做法是直接删去下面这行代码:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

<>这句代码是默认会结束程序,但我尝试后并没有解决问题,后来看来某百度知道才终于解决了问题

JFrame的关闭不像Frame,点关闭按钮自己会关闭,但是那样做不好.可以用setDefaultCloseOperation(int

operation);其中operation有以下几种:

DO_NOTHING_ON_CLOSE(在 WindowConstants 中定义):不执行任何操作;要求程序在已注册的 WindowListener

对象的 windowClosing 方法中处理该操作。

HIDE_ON_CLOSE(在 WindowConstants 中定义):调用任意已注册的 WindowListener 对象后自动隐藏该窗体。

DISPOSE_ON_CLOSE(在 WindowConstants 中定义):调用任意已注册 WindowListener 的对象后自动隐藏并释放该窗体。

EXIT_ON_CLOSE(在 JFrame 中定义):使用 System exit 方法退出应用程序。仅在应用程序中使用。

默认情况下,该值被设置为 HIDE_ON_CLOSE。更改此属性的值将导致激发属性更改事件,其属性名称为 “defaultCloseOperation”。

<>于是将setDefaultCloseOperation(int operation)的值更改为DO_NOTHING_ON_CLOSE后解决问题
frame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);