99 votes

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

Je souhaite 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 fenêtre de se fermer si l'utilisateur choisit de ne pas continuer.

167voto

Ravindra Gullapalli Points 5132
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 choisisse « Oui », vous pouvez ajouter :

 frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

26voto

Shashank Kadne Points 4531

Remplacez la méthode windowClosing.

 public void windowClosing(WindowEvent e)

Il est invoqué lorsqu'une fenêtre est en train d'être fermée. L'opération de fermeture peut être annulée à ce stade.

1voto

Phidippus Points 11

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

1voto

Russell Points 346
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

fonctionne aussi. Créez d'abord un JFrame appelé frame, puis ajoutez ce code en dessous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X