webentwicklung-frage-antwort-db.com.de

Wie erfasse ich ein JFrame-Klickereignis zum Schließen der Schaltfläche?

Ich möchte eine Methode confirmExit() aufrufen, wenn auf die rote Schaltfläche zum Schließen der Titelleiste eines JFrames geklickt wird.

Wie kann ich dieses Ereignis erfassen?

Ich möchte auch verhindern, dass sich das Fenster schließt, wenn der Benutzer entscheidet, nicht fortzufahren.

81
alxcyl
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);
        }
    }
});

Wenn Sie auch verhindern möchten, dass das Fenster geschlossen wird, es sei denn, der Benutzer wählt "Ja", können Sie Folgendes hinzufügen:

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
130

WindowClosing-Methode überschreiben.

public void windowClosing(WindowEvent e)

Es wird aufgerufen, wenn ein Fenster gerade geschlossen wird. Der Schließvorgang kann an dieser Stelle überschrieben werden.

25
Shashank Kadne
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

funktioniert auch. Erstellen Sie zuerst einen JFrame mit dem Namen frame und fügen Sie dann diesen Code darunter ein.

4
Russell

Dies ist eine Menüoption, mit der ich eine Schaltfläche auf einem JFrame erstellt habe, um ein anderes JFrame anzuzeigen. Ich wollte, dass nur der neue Rahmen sichtbar ist und der dahinterliegende nicht zerstört wird. Ich versteckte zunächst das erste JFrame, während das neue sichtbar wurde. Nach dem Schließen des neuen JFrame entsorgte ich es und machte das alte wieder sichtbar.

Hinweis: Der folgende Code erweitert Ravindas Antwort und ng ist ein 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);
        }
    });
});
1
Cody

Das kann funktionieren:

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");
    }
});

Quelle: https://alvinalexander.com/Java/jdialog-close-closing-event

1
Phidippus