• 热门专题

关于JOptionPane的showConfirmDialog问题

作者:yanghai0321  发布日期:2011-12-06 16:46:23
Tag标签:JOptionPane  showConfirmDialog  
  • 在写记事本时,在处理关闭事件时用到JOptionPane的showConfirmDialog,却发现一些问题,代码和问题如下:

    1. addWindowListener(word">new WindowAdapter() {  
    2.             word">public void windowClosing(WindowEvent event) {  
    3.                 if (selectedFile == null       
    4.                         && textArea.getText().equals("")){  
    5.                     System.exit(0);  
    6.               //这个代表是一个空的文档,点击直接退出,成功                     
    7.                 }else if(JOptionPane.showConfirmDialog(container,   
    8.                                             "是否保存?","是否保存",//①   
    9.                    JOptionPane.YES_NO_CANCEL_OPTION) == JOptionPane.CANCEL_OPTION){  
    10.                         return;  
    11.              //当有文档时,点关闭时弹出对话框,按“取消”则返回,成功   
    12.                 }else if(JOptionPane.showConfirmDialog(container,   
    13.                                            "是否保存?","是否保存",//②   
    14.                        JOptionPane.YES_NO_CANCEL_OPTION) == JOptionPane.NO_OPTION){  
    15.                     System.exit(0);  
    16.             //当点关闭,按“否”(即不保存时),还会出现一次对话框,要再按一次“否”才退出   
    17.                 }else if(JOptionPane.showConfirmDialog(container,   
    18.                                            "是否保存?","是否保存",//③   
    19.                        JOptionPane.YES_NO_CANCEL_OPTION) == JOptionPane.YES_OPTION){  
    20.                      //保存功能代码   
    21.             //当点关闭,点“是”,要三次才可以保存,再退出!   
    22.                 }  
    23.             }  
    24.            });  
    25.  

    到后面比如到了执行②或③语句时,出现了要点好几次才能得到预期结果的问题。

    这是因为每个else if()语句里都有showConfirmDialog,而系统要一个个进行判断,每判断一次,就调用showConfirmDialog,只有选择了(“是”、“否”或“取消”)后,它才确定这条语句的值,所以哪条语句前有n条这个语句即showConfirmDialog总共被调用了n+1次,也即要点n+!次才能得到预期结果。

     

    解决的方法是,只写一个showConfirmDialog,保存起来,然后通过判断是否满足条件再决定是否调用。

    代码:

     addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent event) {
                    if (selectedFile == null && textArea.getText().equals("")) {
                        System.exit(0);
                    } else {
                        int btn = JOptionPane.showConfirmDialog(container, "是否保存?",
                                "是否保存", JOptionPane.YES_NO_CANCEL_OPTION);
                        if (btn == JOptionPane.CANCEL_OPTION) {
                            return;
                        } else if (btn == JOptionPane.NO_OPTION) {
                            System.exit(0);
                        } else {
                           //保存功能代码
                        }
                     }
                }
              });  

延伸阅读:

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规