关于JOptionPane的showConfirmDialog问题

本文探讨了在Java Swing中使用JOptionPane.showConfirmDialog时遇到的问题,并提出了一种优化方案,以减少不必要的对话框重复弹出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值