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