Je souhaite appeler une méthode confirmExit()
lorsque l'utilisateur clique sur le bouton de fermeture rouge de la barre de titre d'un JFrame.
Comment puis-je capturer cet événement?
J'aimerais également empêcher la fenêtre de se fermer 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 à moins que l'utilisateur ne clique sur "Oui", vous pouvez ajouter:
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
Ignorer 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 aussi. Commencez par créer une image JFrame appelée frame, puis ajoutez ce code en dessous.
C’est ce que j’ai mis comme option de menu où j’ai créé un bouton sur un JFrame
pour en afficher un autre JFrame
. Je voulais que seul le nouveau cadre soit visible et non celui qui se trouvait derrière. J'ai initialement caché le premier JFrame
, tandis que le nouveau devenait visible. À la fermeture du nouveau JFrame
, j’en ai disposé, suivi d’une action visant à rendre l’ancien visible à nouveau.
Remarque: le code suivant se développe à partir 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);
}
});
});
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