关于JOptionPane的showConfirmDialog问题

 在写记事本时,在处理关闭事件时用到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 {
                       //保存功能代码
                    }
                 }
            }
          }); 


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

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




 


 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值