Wie kann ein Swing WindowListener veto JFrame schließen

Ich habe ein frame und möchte auffordern, wenn der Benutzer es schließt, das Dokument zu speichern. Aber, wenn Sie Abbrechen, wird der frame nicht in der Nähe.

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 sieht, ob das Dokument fehlerhaft ist. Wenn es nicht, es tut nichts und liefert true. Wenn es schmutzig ist, es fragt den Benutzer, ob er speichern möchte (JA/NEIN/ABBRECHEN). Wenn der Benutzer bricht an diesem Punkt sollte es zum Abbruch der windowClosing.

Alle Vorschläge, die ich gesehen habe im Netz beinhalten explizit verlassen in die windowClosing-Methode, so überschreiben die Verwendung von JFrame.setDefaultCloseOperation(), und duplizieren Sie den code in JFrame.processWindowEvent().

Habe ich eigentlich eine dirty Lösung, aber würde gerne sehen, ob es irgendwelche Reiniger lieben.

Cheers

Schreibe einen Kommentar