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
,IFrame
, Table и ее наследники, Tree, PopupButton, PickerField, LookupPickerField.Действия добавляются компоненту вызовом метода
ActionsHolder.addAction()
. Реализация этого метода в компоненте проверяет, нет ли уже в нем действия с таким же идентификатором. Если есть, то имеющееся действие будет заменено на новое переданное. Поэтому можно, например, декларировать стандартное действие в дескрипторе экрана, а затем в контроллере создать новое с переопределенными методами и добавить компоненту.