Главная » ActionScript » Работа с FocusManager

0

Когда пользователь нажимает клавишу Tab, для перехода к элементам в приложении Flash или щелкает элементы приложения мышью, класс FocusManager определяет, какой компонент получает фокус для ввода. Не требуется добавлять экземпляр FocusManager в приложение или создавать код для активации FocusManager, если только не нужно создать этот компонент.

Если объект RadioButton получает фокус, FocusManager анализирует этот и все остальные объекты с одинаковым значением groupName и переводит фокус на объект, у которого свойство selected имеет значение true.

Каждый модальный компонент Window содержит экземпляр FocusManager, поэтому элементы управления в этом окне получают собственный порядок табуляции. Это предотвращает непреднамеренный переход пользователя к компонентам в других окнах при нажатии клавиши Tab.

Экземпляр FocusManager использует уровень глубины элементов в контейнере (или порядок по оси z в качестве схемы перехода, или цикла табуляции, по умолчанию. Пользователь обычно переходит по циклу табуляции с помощью клавиши Tab, причем фокус переходит от первого компонента в фокусе к последнему, а затем снова к первому. Уровни глубины определяются, главным образом, порядком, в котором компоненты перетаскивались в рабочую область, однако для определения окончательного порядка по оси z можно использовать команды "Модификация" > "Упорядочить" > "Переместить на передний план"/"Переместить назад". Дополнительные сведения об уровнях глубины см. в разделе «Работа со списком отображения» на странице 27.

Можно вызвать метод setFocus(), чтобы переместить фокус на определенный экземпляр компонента в приложении. Следующий пример создает экземпляр FocusManager для текущего контейнера (this) и переводит фокус на экземпляр Button с именем aButton.

var fm:FocusManager = new FocusManager(this);

fm.setFocus(aButton);

Чтобы определить, какой компонент получил фокус, нужно вызвать метод getFocus(). А чтобы определить, какой компонент в цикле табуляции получить фокус следующим, нужно вызвать метод getNextFocusManagerComponent(). В следующем примере экземпляры CheckBox, RadioButton и Button находятся в рабочей области, каждый из них имеет прослушиватели для событий MouseEvent.CLICK и FocusEvent.MOUSE_FOCUS_CHANGE. Когда происходит событие MouseEvent.CLICK в результате щелчка по компоненту, функция showFocus() вызывает метод getNextFocusManagerComponent() для определения, какой компонент в цикле табуляции получит фокус следующим. Затем вызывается метод setFocus(), чтобы перевести фокус на этот компонент. Когда происходит событие FocusEvent.MOUSE_FOCUS_CHANGE функция fc() отображает имя компонента, отправившего это событие. Это событие запускается, когда пользователь щелкает компонент, который не является следующим в цикле табуляции.

// This example assumes a CheckBox (aCh), a RadioButton (aRb) and a Button

// (aButton) have been placed on the Stage.

import fl.managers.FocusManager;

import flash.display.InteractiveObject;

var fm:FocusManager = new FocusManager(this);

aCh.addEventListener(MouseEvent.CLICK, showFocus); aRb.addEventListener(MouseEvent.CLICK, showFocus); aButton.addEventListener(MouseEvent.CLICK, showFocus); aCh.addEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, fc); aRb.addEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, fc); aButton.addEventListener(FocusEvent.MOUSE_FOCUS_CHANGE, fc);

function showFocus(event:MouseEvent):void {

var nextComponent:InteractiveObject = fm.getNextFocusManagerComponent(); trace("Next component in tab loop is: " + nextComponent.name); fm.setFocus(nextComponent);

}

function fc(fe:FocusEvent):void {

trace("Focus Change: " + fe.target.name);

}

Чтобы создать экземпляр Button, получающий фокус при нажатии клавиши Enter (Windows) или Return (Macintosh), задайте для свойства FocusManager.defaultButton экземпляр Button, который должен быть кнопкой по умолчанию, как показано в следующем коде.

import fl.managers.FocusManager;

var fm:FocusManager = new FocusManager(this);

fm.defaultButton = okButton;

Класс FocusManager переопределяет прямоугольник фокуса по умолчанию для Flash Player и рисует пользовательский прямоугольник фокуса со скругленными краями.

Дополнительные сведения о создании схемы фокуса в приложении Flash см. в описании класса FocusManager в Справочнике по языку ActionScript 3.0 и компонентам. Чтобы создать пользовательский диспетчер фокуса, необходимо создать класс, реализующий интерфейс IFocusManager. Дополнительные сведения см. в разделе IFocusManager в Справочнике по языку ActionScript 3.0 и компонентам.

Источник: Использование компонентов ActionScript 3.0 – 2008

По теме:

  • Комментарии