您的位置:首页 > 运维架构

关于JOptionPane的showConfirmDialog问题

2011-12-06 15:53 344 查看
 在写记事本时,在处理关闭事件时用到JOptionPane的showConfirmDialog,却发现一些问题,代码和问题如下:

addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent event) {
                if (selectedFile == null    
                        && textArea.getText().equals("")){
                    System.exit(0);
              //这个代表是一个空的文档,点击直接退出,成功                 
                }else if(JOptionPane.showConfirmDialog(container,
                                            "是否保存?","是否保存",//①
                   JOptionPane.YES_NO_CANCEL_OPTION) == JOptionPane.CANCEL_OPTION){
                        return;
             //当有文档时,点关闭时弹出对话框,按“取消”则返回,成功
                }else if(JOptionPane.showConfirmDialog(container,
                                           "是否保存?","是否保存",//②
                       JOptionPane.YES_NO_CANCEL_OPTION) == JOptionPane.NO_OPTION){
                    System.exit(0);
            //当点关闭,按“否”(即不保存时),还会出现一次对话框,要再按一次“否”才退出
                }else if(JOptionPane.showConfirmDialog(container,
                                           "是否保存?","是否保存",//③
                       JOptionPane.YES_NO_CANCEL_OPTION) == JOptionPane.YES_OPTION){
                     //保存功能代码
            //当点关闭,点“是”,要三次才可以保存,再退出!
                }
            }
          });

 

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

这是因为每个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 {
//保存功能代码
}
}
}
});


嘿嘿,各位写代码也有点累了吧,特别是深夜的时候是不是觉得应该有点吃的就更好了?

可以到本人开的小店“小灰灰休闲美食”店买点休闲食品哦,既满足食欲又可以放松哈子,当然平时也要吃是吧,也可以买来送朋友哦!

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文档 null