Comment capturer un événement de clic sur un bouton de fermeture de JFrame?

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.