Когда пользователь нажимает клавишу Tab, для перехода к элементам в приложении Flash или щелкает элементы приложения мышью, класс FocusManager определяет, какой компонент получает фокус для ввода. Не требуется добавлять экземпляр FocusManager в приложение или создавать код для активации FocusManager, если только не нужно создать этот компонент.
Если объект RadioButton получает фокус, FocusManager анализирует этот и все остальные объекты с одинаковым значением
groupName
и переводит фокус на объект, у которого свойство
selected
имеет значение
true
.
Каждый модальный компонент Window содержит экземпляр FocusManager, поэтому элементы управления в этом окне получают собственный порядок табуляции. Это предотвращает непреднамеренный переход пользователя к компонентам в других окнах при нажатии клавиши Tab.
Экземпляр FocusManager использует уровень глубины элементов в контейнере (или порядок по оси
z
в качестве схемы перехода, или
цикла табуляции
, по умолчанию. Пользователь обычно переходит по циклу табуляции с помощью клавиши Tab, причем фокус переходит от первого компонента в фокусе к последнему, а затем снова к первому. Уровни глубины определяются, главным образом, порядком, в котором компоненты перетаскивались в рабочую область, однако для определения окончательного порядка по оси
z
можно использовать команды «Модификация» > «Упорядочить» > «Переместить на передний план»/»Переместить назад». Дополнительные сведения об уровнях глубины см. в разделе
Работа со списком отображения
.
Можно вызвать метод
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 и рисует пользовательский прямоугольник фокуса со скругленными краями.
Дополнительные сведения о создании схемы перехода фокуса см. в описании класса
FocusManager
в
справочнике ActionScript® 3.0
для Adobe® Flash® Professional CS5
. Чтобы создать пользовательский диспетчер фокуса, необходимо создать класс, реализующий интерфейс
IFocusManager
. Дополнительные сведения см. в описании интерфейса
IFocusManager
в
справочнике ActionScript® 3.0
для Adobe® Flash® Professional CS5
.