web-dev-qa-db-fra.com

Java Swing ajoutant le programme d'écoute d'action pour EXIT_ON_CLOSE

J'ai une interface graphique simple:

    public class MyGUI extends JFrame{

        public MyGUI(){
           run();
        }

        void run(){
           setSize(100, 100);
           setVisible(true);
           setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// maybe an action listener here
        }
    }

Je voudrais imprimer ce message:

 System.out.println("Closed");

Lorsque l'interface graphique est fermée (lorsque vous appuyez sur X). Comment puis je faire ça?

22
Sam

Essaye ça.

    addWindowListener(new WindowAdapter()
        {
            @Override
            public void windowClosing(WindowEvent e)
            {
                System.out.println("Closed");
                e.getWindow().dispose();
            }
        });
52
prasanth

Ecrivez ce code dans le constructeur de votre JFrame :

this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.addWindowListener(new Java.awt.event.WindowAdapter() {
    @Override
    public void windowClosing(Java.awt.event.WindowEvent e) {
        System.out.println("Uncomment following to open another window!");
        //MainPage m = new MainPage();
        //m.setVisible(true);
        e.getWindow().dispose();
        System.out.println("JFrame Closed!");
    }
});
1
ersks

Une autre possibilité pourrait être de remplacer dispose() à partir de la classe Window. Cela réduit le nombre de messages envoyés et fonctionne également si l'opération de fermeture par défaut est définie sur DISPOSE_ON_CLOSE

Concrètement, cela signifie ajouter

@Override
public void dispose() {
    System.out.println("Closed");
    super.dispose();
}

à votre classe MyGUI.

Remarque: n'oubliez pas d'appeler super.dispose() car cela libère les ressources d'écran!

0
Mr Tsjolder