KeyEventDispatcher — 키 이벤트 디스패처
KeyEventDispatcher — 키 이벤트 디스패처
KeyEventDispatcher는 현재 KeyboardFocusManager와 협력해서 모든 KeyEvent를 대상(target)에 전달하고 디스패치하는 역할을 해요. 현재 KeyboardFocusManager에 등록된 KeyEventDispatcher는 이벤트가 대상에 전달되기 전에 먼저 이벤트를 받아볼 수 있어요.
본문
@FunctionalInterface
public interface KeyEventDispatcher {
boolean dispatchKeyEvent(KeyEvent e);
}
등록된 디스패처는 이벤트를 다시 대상으로 바꾸거나(re-target), 소비(consume)하거나, 스스로 디스패치하거나, 다른 변경을 가할 수 있어요. KeyboardFocusManager 자신도 KeyEventDispatcher를 구현해요. 등록된 디스패처가 디스패치하지 않은 KeyEvent는 기본적으로 현재 KeyboardFocusManager가 최종 처리해요.
디스패처가 직접 이벤트를 디스패치했다면 KeyboardFocusManager.redispatchEvent를 사용해 재귀 호출을 막아야 해요.
- 반환값이
false면 이벤트는 체인의 다음KeyEventDispatcher로 전달되고, 마지막엔KeyboardFocusManager가 처리해요. - 반환값이
true면 이벤트가 디스패치된 것으로 간주하고KeyboardFocusManager는 더 이상 조치하지 않아요. - 이벤트를 소비했지만
false를 반환하면 소비된 이벤트도 여전히 다음 디스패처로 전달돼요.
이런 기능은 주로 포커스 소유자가 아닌 컴포넌트에 키 이벤트를 전달할 때 써요. 예를 들어 포커스 불가능한 창의 자식을 탐색하는 시나리오에 유용해요.