Как Swing WindowListener может запретить закрытие JFrame

У меня есть фрейм, и я хочу, чтобы когда пользователь закрыл его, запросил сохранение документа. Но если они отменяются, фрейм не должен закрываться.

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 проверяет, не загрязнен ли документ. Если это не так, он ничего не делает и возвращает true. Если он грязный, он спрашивает пользователя, хочет ли он сохранить (ДА / НЕТ / ОТМЕНА). Если пользователь отменит на этом этапе, он должен прервать windowClosing.

Все предложения, которые я видел в сети, включают явный выход из метода windowClosing, тем самым отменяя использование JFrame.setDefaultCloseOperation () и дублируя код в JFrame.processWindowEvent ().

На самом деле у меня есть грязное решение, но я хотел бы посмотреть, есть ли какие-нибудь более чистые.

Ура

8
задан Duncan McGregor 23 September 2010 в 12:05
поделиться