关于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 { //保存功能代码 } } } });







你可能感兴趣的:(java)