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
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%Das Schließen einer Anwendung könnte Ihnen den Vorgang ein wenig erleichtern.
Ich denke, dies ist der logische Ausdruck von Thirlers Antwort und etwas, was ich vermeiden wollte.
%Vor%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%