Saya ingin memanggil metode confirmExit()
ketika tombol tutup merah dari bilah judul JFrame diklik.
Bagaimana saya bisa menangkap peristiwa itu?
Saya juga ingin mencegah jendela ditutup jika pengguna memilih untuk tidak melanjutkan.
Jawaban:
import javax.swing.JOptionPane;
import javax.swing.JFrame;
/*Some piece of code*/
frame.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
if (JOptionPane.showConfirmDialog(frame,
"Are you sure you want to close this window?", "Close Window?",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION){
System.exit(0);
}
}
});
Jika Anda juga ingin mencegah jendela ditutup kecuali pengguna memilih 'Ya', Anda dapat menambahkan:
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
Timpa Metode Penutupan jendela.
public void windowClosing(WindowEvent e)
Ini dipanggil ketika jendela sedang dalam proses ditutup. Operasi penutupan dapat diganti pada saat ini.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
juga bekerja. Pertama buat JFrame yang disebut frame, lalu tambahkan kode ini di bawahnya.
confirmExit()
metode seperti yang diinginkan OP
confirmExit()
ketika [X] diklik." Dan komentar sebelumnya tidak terkait dengan OQ.
Ini mungkin berhasil:
jdialog.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
System.out.println("jdialog window closed event received");
}
public void windowClosing(WindowEvent e) {
System.out.println("jdialog window closing event received");
}
});
Sumber: https://alvinalexander.com/java/jdialog-close-closing-event
Inilah yang saya taruh sebagai pilihan menu dimana saya membuat tombol pada a JFrame
untuk menampilkan yang lain JFrame
. Saya ingin hanya bingkai baru yang terlihat, dan tidak menghancurkan yang di belakangnya. Saya awalnya menyembunyikan yang pertama JFrame
, sedangkan yang baru menjadi terlihat. Setelah menutup yang baru JFrame
, saya membuangnya diikuti dengan tindakan membuat yang lama terlihat lagi.
Catatan: Kode berikut memperluas jawaban Ravinda dan ng
merupakan JButton
:
ng.addActionListener((ActionEvent e) -> {
setVisible(false);
JFrame j = new JFrame("NAME");
j.setVisible(true);
j.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
setVisible(true);
}
});
});
Coba ini:
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
Ini akan berhasil.
implements WindowListener
agar kode ini berfungsi? Jika demikian, mungkin baik untuk memasukkannya ke dalam jawaban. Kalau tidak, ini adalah solusi yang elegan.