¿Cómo puede un Swing WindowListener vetar el cierre de JFrame?

Tengo un marco y deseo que aparezca cuando el usuario lo cierre para guardar el documento. Pero si se cancelan, el marco no debería cerrarse.

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 analiza si el documento está sucio. Si no es así, no hace nada y devuelve verdadero. Si está sucio, le pregunta al usuario si quiere guardar (SÍ / NO / CANCELAR). Si el usuario cancela en este punto, debería abortar el cierre de la ventana.

Todas las sugerencias que he visto en la red implican salir explícitamente del método windowClosing, anulando así el uso de JFrame.setDefaultCloseOperation () y duplicando el código en JFrame.processWindowEvent ().

De hecho, tengo una solución sucia, pero me gustaría ver si hay alguna más limpia.

Salud

Respuestas a la pregunta(4)

Su respuesta a la pregunta