Wie kann ein Swing WindowListener JFrame schließen?

8

Ich habe einen Rahmen und möchte eine Aufforderung ausgeben, wenn der Benutzer ihn schließt, um das Dokument zu speichern. Aber wenn sie abbrechen, sollte der Rahmen nicht geschlossen werden.

%Vor%

FileState prüft, ob das Dokument schmutzig ist. Wenn es nicht ist, tut es nichts und kehrt wahr zurück. Wenn es schmutzig ist, fragt es den Benutzer, ob er speichern möchte (JA / NEIN / ABBRECHEN). Wenn der Benutzer zu diesem Zeitpunkt abbricht, sollte windowClosing abgebrochen werden.

Alle Vorschläge, die ich im Internet gesehen habe, beinhalten das explizite Aufrufen der windowClosing-Methode, wodurch die Verwendung von JFrame.setDefaultCloseOperation () überschrieben und der Code in JFrame.processWindowEvent () dupliziert wird.

Ich habe tatsächlich eine schmutzige Lösung, würde aber gerne sehen, ob es irgendwelche saubereren gibt.

Prost

    
Duncan McGregor 23.09.2010, 09:50
quelle

4 Antworten

15

Der richtige Weg ist JFrame.setDefaultCloseOperation zu DO_NOTHING_ON_CLOSE , wenn das Fenster erstellt wird. Und dann rufen Sie einfach setVisible(false) oder dispose() auf, wenn Ihr Benutzer das Schließen annimmt oder nichts tut, wenn das Schließen nicht akzeptiert wird.

Der ganze Zweck von JFrame.setDefaultCloseOperation soll nur verhindern, dass WindowListeners für die einfachsten Aktionen implementiert werden muss. Die von diesen standardmäßigen Schließvorgängen ausgeführten Aktionen sind sehr einfach.

BEARBEITEN:

Ich habe die Lösung hinzugefügt, die ich beschreibe. Dies setzt voraus, dass der Frame vollständig gelöscht werden soll.

%Vor%     
Thirler 23.09.2010, 11:20
quelle
1

Das Schließen einer Anwendung könnte Ihnen den Vorgang ein wenig erleichtern.

    
camickr 23.09.2010 17:07
quelle
0

Ich denke, dies ist der logische Ausdruck von Thirlers Antwort und etwas, was ich vermeiden wollte.

%Vor%     
Duncan McGregor 23.09.2010 12:31
quelle
0

Dank der Eingabe von Thirler und Camickr. Dies ist meine Lösung, von der ich sicher bin, dass sie einige hassen wird. Sie vermeidet jedoch das Duplizieren von Logik in JFrame und ermöglicht Client-Code wie gewohnt setDefaultCloseOperation.

%Vor%     
Duncan McGregor 24.09.2010 16:46
quelle

Tags und Links