Wie erfasst man das Klick-Event eines JFrames bei einem Klick?

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

Wie kann ich dieses Ereignis erfassen?

Ich möchte auch verhindern, dass das Fenster geschlossen wird, wenn der Benutzer nicht fortfahren möchte.

 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, wenn der Benutzer nicht “Ja” wählt, 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. Die Close-Operation kann an dieser Stelle überschrieben werden.

  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

funktioniert auch. Erstellen Sie zuerst einen JFrame namens frame und fügen Sie dann diesen Code darunter hinzu.

Dies könnte 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

Dies stelle ich als JFrame , wo ich eine Schaltfläche auf einem JFrame , um einen anderen JFrame . Ich wollte nur den neuen Rahmen sichtbar machen und nicht den dahinterliegenden Rahmen zerstören. Ich versteckte zunächst den ersten JFrame , während der neue sichtbar wurde. Nach dem Schließen des neuen JFrame entsorgte ich ihn, gefolgt von einer Aktion, die alte wieder sichtbar zu machen.

Hinweis: Der folgende Code erweitert sich von 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); } }); }); 

Versuche dies:

 setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); 

Es wird klappen.