Wie kann ein Swing WindowListener JFrame schließen?

Ich habe einen Rahmen und möchte dazu auffordern, wenn der Benutzer ihn schließt, um das Dokument zu speichern. Wenn sie jedoch abgebrochen werden, sollte der Frame nicht geschlossen werden.

frame.addWindowListener(new SaveOnCloseWindowListener(fileState));
...
public class SaveOnCloseWindowListener extends WindowAdapter {
    private final FileState fileState;

    public SaveOnCloseWindowListener(FileState fileState) {
        this.fileState = fileState;
    }

    public void windowClosing(WindowEvent e) {
        if (!fileState.onQuit())
            cancelClose();  
    }
}

FileState prüft, ob das Dokument verschmutzt ist. Wenn nicht, tut es nichts und gibt true zurück. Wenn es verschmutzt ist, fragt es den Benutzer, ob er speichern möchte (JA / NEIN / ABBRECHEN). Wenn der Benutzer zu diesem Zeitpunkt abbricht, sollte das Fenster geschlossen werden.

Alle Vorschläge, die ich im Internet gesehen habe, beinhalten das explizite Verlassen der windowClosing-Methode, das Überschreiben der Verwendung von JFrame.setDefaultCloseOperation () und das Duplizieren des Codes in JFrame.processWindowEvent ().

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

Pros

Antworten auf die Frage(8)

Ihre Antwort auf die Frage