FocusManager를 사용한 작업

사용자가 Tab 키를 눌러 Flash 응용 프로그램에서 이동하거나 응용 프로그램에서 마우스를 클릭하면 FocusManager 클래스는 입력 포커스를 받을 구성 요소를 결정합니다. 구성 요소를 직접 만드는 경우를 제외하고는 FocusManager 인스턴스를 응용 프로그램에 직접 추가하거나 FocusManager를 활성화하는 코드를 작성할 필요가 없습니다.

RadioButton 객체가 포커스를 받으면 FocusManager는 해당 객체 및 groupName 값이 동일한 모든 객체를 검사한 후 selected 속성이 true 로 설정된 객체에 포커스를 설정합니다.

각 모달 Window 구성 요소에 FocusManager의 인스턴스가 포함되어 있으므로 해당 윈도우 내에서만 자체적으로 탭이 설정됩니다. 따라서 사용자가 실수로 Tab 키를 눌러도 다른 윈도우의 구성 요소로 이동하지 않습니다.

FocusManager는 기본 탐색 체계 또는 탭 루프 로 컨테이너의 요소 심도 레벨(또는 z 순서)을 사용합니다. 탭 루프는 대개 Tab 키를 사용하여 탐색합니다. 포커스가 있는 첫 번째 구성 요소에서 마지막 구성 요소로 포커스가 이동한 후 다시 첫 번째 구성 요소로 이동합니다. 심도 레벨은 주로 구성 요소를 스테이지로 드래그하는 순서에 따라 설정되지만 [수정] > [정렬] > [맨 앞으로 가져오기]/[맨 뒤로 보내기] 명령을 사용하여 최종 z 순서를 결정할 수도 있습니다. 심도 레벨에 대한 자세한 내용은 표시 목록을 사용한 작업 을 참조하십시오.

응용 프로그램에서 구성 요소 인스턴스에 포커스를 설정하려면 setFocus() 메서드를 호출합니다. 예를 들어, 다음 예제에서는 현재 컨테이너( this )에 대해 FocusManager 인스턴스를 만들고 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); 
}

사용자가 Enter 키(Windows) 또는 Return 키(Macintosh)를 누를 때 포커스를 받는 Button을 만들려면 다음 코드와 같이 기본 Button으로 사용할 Button 인스턴스로 FocusManager.defaultButton 속성을 설정합니다.

import fl.managers.FocusManager; 
 
var fm:FocusManager = new FocusManager(this); 
fm.defaultButton = okButton;

FocusManager 클래스는 기본 Flash Player 포커스 사각형을 무시하고 모서리가 둥근 사용자 정의 포커스 사각형을 그립니다.

Flash 응용 프로그램에서 포커스 체계 만들기에 대한 자세한 내용은 Flash Professional용 ActionScript 3.0 참조 설명서 에서 FocusManager 클래스 를 참조하십시오. 사용자 정의 포커스 관리자를 만들려면 IFocusManager 인터페이스를 구현하는 클래스를 만들어야 합니다. 자세한 내용은 Flash Professional용 ActionScript 3.0 참조 설명서 에서 IFocusManager 를 참조하십시오.