在Java學(xué)習(xí)GUI時難免會遇到點擊框架退出時需要彈出確認(rèn)提示框的需求磁滚,廢話不多說,直接上代碼,下面是主程序宵晚,MenuFrame是繼承JFame的類
public class Test_19 {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
MenuFrame frame = new MenuFrame();
//不執(zhí)行任何操作;要求程序在已注冊的 WindowListener 對象的 windowClosing 方法中處理該操作
frame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
int result = JOptionPane.showConfirmDialog(null, "確認(rèn)退出?", "確認(rèn)", JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE);
if(result == JOptionPane.OK_OPTION){
System.exit(0);
}
}
});
frame.setTitle("第二次作業(yè)");
frame.setVisible(true);
});
}
}
代碼是挺短的垂攘,邏輯也很簡單,首先為frame添加了一個監(jiān)聽窗口事件的方法addWindowListener淤刃,然后使用了匿名內(nèi)部類的方法晒他,,將WindowAdapter的對象傳給這個方法,然后在匿名類中重寫了windowClosing的方法逸贾,接著在方法里面顯示了確認(rèn)的對話框陨仅,對確認(rèn)按鈕進行監(jiān)聽,并實現(xiàn)退出铝侵。
上面代碼親測有效灼伤,不過有些坑我覺得還是得提出來,有些人可能會碰到某些問題咪鲜,能夠彈出確認(rèn)框狐赡,但點擊取消按鈕后還是退出了程序,其實程序并沒有結(jié)束疟丙,只是被隱藏了起來颖侄,如何解決呢?
網(wǎng)上很多做法是直接刪去下面這行代碼:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
這句代碼是默認(rèn)會結(jié)束程序享郊,但我嘗試后并沒有解決問題览祖,后來看來某百度知道才終于解決了問題
JFrame的關(guān)閉不像Frame,點關(guān)閉按鈕自己會關(guān)閉炊琉,但是那樣做不好.可以用setDefaultCloseOperation(int operation);其中operation有以下幾種:
DO_NOTHING_ON_CLOSE(在 WindowConstants 中定義):不執(zhí)行任何操作;要求程序在已注冊的 WindowListener 對象的 windowClosing 方法中處理該操作穴墅。
HIDE_ON_CLOSE(在 WindowConstants 中定義):調(diào)用任意已注冊的 WindowListener 對象后自動隱藏該窗體。
DISPOSE_ON_CLOSE(在 WindowConstants 中定義):調(diào)用任意已注冊 WindowListener 的對象后自動隱藏并釋放該窗體温自。
EXIT_ON_CLOSE(在 JFrame 中定義):使用 System exit 方法退出應(yīng)用程序。僅在應(yīng)用程序中使用皇钞。
默認(rèn)情況下悼泌,該值被設(shè)置為 HIDE_ON_CLOSE。更改此屬性的值將導(dǎo)致激發(fā)屬性更改事件夹界,其屬性名稱為 "defaultCloseOperation"馆里。
于是將setDefaultCloseOperation(int operation)的值更改為DO_NOTHING_ON_CLOSE后解決問題
frame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);