在寫記事本時,在處理關閉事件時用到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 {
//保存功能代碼
}
}
}
});
嘿嘿,各位寫代碼也有點累了吧,特別是深夜的時候是不是覺得應該有點喫的就更好了?
可以到本人開的小店“小灰灰休閒美食”店買點休閒食品哦,既滿足食慾又可以放鬆哈子,當然平時也要喫是吧,也可以買來送朋友哦!