美文网首页
Java实现窗口退出确认框,确认框取消按钮问题

Java实现窗口退出确认框,确认框取消按钮问题

作者: 残渊_jsyjst | 来源:发表于2019-03-01 12:02 被阅读0次

    在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);
    

    相关文章

      网友评论

          本文标题:Java实现窗口退出确认框,确认框取消按钮问题

          本文链接:https://www.haomeiwen.com/subject/mufduqtx.html