Je veux appeler une méthode confirmExit()
lorsque le bouton de fermeture rouge de la barre de titre d’un JFrame est cliqué.
Comment puis-je capturer cet événement?
J’aimerais également empêcher la fermeture de la fenêtre si l’utilisateur choisit de ne pas continuer.
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); } } });
Si vous souhaitez également empêcher la fermeture de la fenêtre, sauf si l’utilisateur choisit «Oui», vous pouvez append:
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
Remplacer la méthode windowClosing.
public void windowClosing(WindowEvent e)
Il est appelé lorsqu’une fenêtre est en cours de fermeture. L’opération de fermeture peut être annulée à ce stade.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fonctionne également. Commencez par créer un cadre appelé JFrame, puis ajoutez ce code en dessous.
Cela peut fonctionner:
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"); } });
Source: https://alvinalexander.com/java/jdialog-close-closing-event
C’est ce que j’ai mis comme option de menu où j’ai fait un bouton sur un JFrame
pour afficher un autre JFrame
. Je voulais seulement que le nouveau cadre soit visible et que je ne détruise pas celui qui est derrière. J’ai initialement caché le premier JFrame
, tandis que le nouveau est devenu visible. À la fermeture du nouveau JFrame
, je me suis débarrassé de lui, suivi d’une action visant à rendre l’ancien visible à nouveau.
Note: Le code suivant se développe hors de la réponse de Ravinda et ng
est un 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); } }); });
Essaye ça:
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
Ça va marcher.