it-swarm.com.de

Java Swing fügt Action Listener für EXIT_ON_CLOSE hinzu

Ich habe eine einfache GUI:

    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
        }
    }

Ich möchte diese Nachricht ausdrucken:

 System.out.println("Closed");

Wenn die GUI geschlossen ist (wenn das X gedrückt wird). Wie kann ich das machen?

22
Sam

Versuche dies.

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

Schreiben Sie diesen Code in den Konstruktor Ihres 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

Eine andere Möglichkeit könnte darin bestehen, dispose() von der Window-Klasse zu überschreiben. Dies verringert die Anzahl der umgesendeten Nachrichten und funktioniert auch, wenn der Standardabschlussvorgang auf DISPOSE_ON_CLOSE eingestellt ist. 

Konkret bedeutet dies das Hinzufügen

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

zu deiner Klasse MyGUI.

Hinweis: Vergessen Sie nicht, super.dispose() aufzurufen, da dadurch die Bildschirmressourcen freigegeben werden!

0
Mr Tsjolder