Ti ringrazio della dritta, ma non sono riuscito ad applicarla: non riuscivo a gestire l'eccezione PropertyVetoException. Nel caso del WindowListener chi la deve gestire?

Alla fine ho risolto con una soluzione brutale ma efficace:

codice:
    // non vuole più chiudere:
    String sorg = sorgente.getText();
    MainClass m = new MainClass();
    m.sorgente.setText(sorg);
    m.cambiato = true;
Nel caso che l'utente cambi idea viene chiuso l'editor, ma ne viene subito creato un'altro contenente il testo dell'appena defunto predecessore.

Sinceramente questa soluzione non mi convince molto, ma almeno funziona.

Qualcuno sa fare di meglio? Qualcuno sa come gestire quei maledetti undo?

Ciauz!