4.5.4. Действия. Интерфейс Action
Action − интерфейс, абстрагирующий действие (другими словами, некоторую функцию) от визуального компонента. Он особенно полезен в случаях, когда одно и то же действие может быть вызвано из разных визуальных компонентов. Кроме того, данный интерфейс позволяет снабдить действие дополнительными свойствами, такими как название, признаки доступности и видимости, и другими.
Рассмотрим методы интерфейса Action:
-
actionPerform()- вызывается визуальным компонентом, связанным с данным действием. В метод передается экземпляр вызвавшего компонента. -
getId()- возвращает идентификатор данного действия. Идентификатор обычно устанавливается конструктором класса, реализующегоAction, и не меняется на протяжении жизни созданного объекта действия. -
методы получения и установки свойств
caption,description,shortcut,icon,enabled,visible. Все эти свойства обычно используется связанными визуальными компонентами для установки собственных одноименных свойств. -
addPropertyChangeListener(),removePropertyChangeListener()- подключение слушателей, реагирующих на изменение вышеупомянутых свойств. Слушатель получает уведомление типаjava.beans.PropertyChangeEvent, в котором содержится имя измененного свойства, его старое и новое значение. -
refreshState()- метод, который может быть реализован в конкретном классе действия для инициализации вышеупомянутых свойств в соответствии с какими-либо внешними факторами, например правами пользователя. Вызывается обычно в конструкторах имплементирующих классов или из связанных визуальных компонентов. -
addOwner(),removeOwner(),getOwner(),getOwners()- методы для управления связью действия с визуальными компонентами.
Для реализации действий рекомендуется использовать декларативное создание действий, либо наследоваться от класса AbstractAction. Кроме того, существует набор стандартных действий, применимых для работы с таблицами и компонентами выбора. От стандартных действий также можно наследоваться для модификации их поведения или перехвата событий.
Визуальные компоненты, связанные с действием, могут быть двух типов:
-
Визуальный компонент, содержащий одно действие, реализует интерфейс
Component.ActionOwner. Это Button и LinkButton.Связь компонента с действием осуществляется путем вызова метода
ActionOwner.setAction()компонента. В этот момент компонент заменяет свои свойства на соответствующие свойства действия (подробнее см. описание компонентов). -
Визуальный компонент, содержащий несколько действий, реализует интерфейс
Component.ActionsHolder. ЭтоWindow,Frame, Table и ее наследники, Tree, PopupButton, PickerField, LookupPickerField.Действия добавляются компоненту вызовом метода
ActionsHolder.addAction(). Реализация этого метода в компоненте проверяет, нет ли уже в нем действия с таким же идентификатором. Если есть, то имеющееся действие будет заменено на новое переданное. Поэтому можно, например, декларировать стандартное действие в дескрипторе экрана, а затем в контроллере создать новое с переопределенными методами и добавить компоненту.