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