Я собираюсь изменить приложение Swing для использования ActionListeners с классами Action, потому что я понял, что многие из моих пунктов меню будут также использоваться на панели инструментов.
Сейчас у меня есть класс с именем ImportExport
, который обрабатывает состояние базовой модели и затем отображает соответствующие пользовательские диалоги. ImportExport
имеет функции save()
, saveAs()
и open()
. Когда пользователь нажимает на элемент меню «Открыть», прослушиватель действий вызывает open()
, open()
, сначала проверяет, есть ли изменения в модели, и в этом случае отображается диалоговое окно, спрашивающее пользователя, хочет ли он сначала сохранить. Теперь, если пользователь нажимает «Да», open()
вызывает save()
, который снова выполняет некоторые проверки и отображает диалоги пользователя. save()
довольно настойчив: единственный способ выйти из этого действия - либо успешно сохранить, либо пользователь решает, что он хочет отменить. Я настоятельно полагаюсь на обратную связь, которую обеспечивает save()
, и если пользователь хочет отменить, я также отменяю вызывающую функцию open()
.
Я хотел разделить класс ImportExport
на три класса (OpenAction
, SaveAction
& SaveAsAction
), каждый из которых подклассов AbstractAction
и в конечном итоге избавиться от класса ImportExport
. И вот тут возникает моя проблема: как я могу сказать SaveAction
выполнить, если пользователь хочет сохранить модель перед открытием другой? И как мне получить отзыв, если пользователь решит отменить?
Это даже правильный подход? Мне не нравится дублировать код в действии сохранения и открытия, и я уже добавил как можно больше функциональных возможностей в основную модель, но диалоговые окна пользователей там явно неуместны, так что это не вариант. Был ли Action
предназначен для поддержки такого рода функций, или я просто оставил свой класс ImportExport
и просто делегировал все вызовы действий соответствующим функциям в ImportExport
. Как вы используете Actions
?