August 1st, 2007
Swing과 Event의 이야기 - II

치아키

이전글 : Swing과 Event의 이야기 - I

경량 컴포넌트 아키텍쳐는 소꿉놀이 같은것이다.
OS에서 제공하는 중량컴포넌트에 네모를 그려두고 ‘이걸 버튼이라 하자’ 가정하는 것이다.
경량 컴포넌트가 그려진 중량컴포넌트(이를 lightweight peer라고 한다)에 마우스 클릭 이벤트가 발생하면
좌표를 계산해서 그 위치가 버튼 그림에 포함되면 ‘버튼이 눌렸다고 하자’ 가정하는 소꿉놀이다.

JLabel에 MouseListener를 추가한 경우를 생각해 보자.
EventQueue에는 JLabel의 top level container(대부분 JFrame)를 source로 하는 이벤트가 추가된다.
EDT(Event Dispatch Thread)가 해당 event를 dispatch하면 JFrame은 해당 좌표가 어느 경량 컴포넌트에 속하는지 판단하여 새 마우스 이벤트로 교체한다.
새로 만들어진 마우스 이벤트는 소스가 JLabel이고 좌표도 JLabel을 기준으로 한다.
더 자세한 내용은 Container.java의 retargetMouseEvent()를 보면된다.

다음에는 마우스 클릭(혹은 기타 마우스 이벤트 발생)시 어떤 JComponent가 Source가 될지를
결정하는 법에 대해 살펴 볼까 한다.