KeyEventDispatcher — 키 이벤트 디스패처

KeyEventDispatcher — 키 이벤트 디스패처

KeyEventDispatcher는 현재 KeyboardFocusManager와 협력해서 모든 KeyEvent를 대상(target)에 전달하고 디스패치하는 역할을 해요. 현재 KeyboardFocusManager에 등록된 KeyEventDispatcher는 이벤트가 대상에 전달되기 전에 먼저 이벤트를 받아볼 수 있어요.

출처: Java API Reference

본문

@FunctionalInterface
public interface KeyEventDispatcher {
    boolean dispatchKeyEvent(KeyEvent e);
}

등록된 디스패처는 이벤트를 다시 대상으로 바꾸거나(re-target), 소비(consume)하거나, 스스로 디스패치하거나, 다른 변경을 가할 수 있어요. KeyboardFocusManager 자신도 KeyEventDispatcher를 구현해요. 등록된 디스패처가 디스패치하지 않은 KeyEvent는 기본적으로 현재 KeyboardFocusManager가 최종 처리해요.

디스패처가 직접 이벤트를 디스패치했다면 KeyboardFocusManager.redispatchEvent를 사용해 재귀 호출을 막아야 해요.

  • 반환값이 false면 이벤트는 체인의 다음 KeyEventDispatcher로 전달되고, 마지막엔 KeyboardFocusManager가 처리해요.
  • 반환값이 true면 이벤트가 디스패치된 것으로 간주하고 KeyboardFocusManager는 더 이상 조치하지 않아요.
  • 이벤트를 소비했지만 false를 반환하면 소비된 이벤트도 여전히 다음 디스패처로 전달돼요.

이런 기능은 주로 포커스 소유자가 아닌 컴포넌트에 키 이벤트를 전달할 때 써요. 예를 들어 포커스 불가능한 창의 자식을 탐색하는 시나리오에 유용해요.

더 알아보기