이벤트 클래스는 크게 상위 레벨 이벤트와 하위 레벨 이벤트로 구별할 수 있다. 상위 레벨 이벤트는 '동작에 초점을 맞춤' 이벤트이고, 하위 이벤트는 '윈도우 처리와 관련된 세밀한 이벤트'에 초점을 맞춘 것이다. 예를 들면, 버튼을 누르면, 상위 레벨 입장에서는 버튼의 Action 이벤트가 발생하지만, 하위 레벨에서 보면 마우스 움직임, 마우스 클릭 등의 여러 개의 이벤트가 발생하는 것이다.
상위 레벨 이벤트
ActionEvent - 컴포넌트가 활성화 될 때 발생
AdjustmentEvent - 스크롤바와 같이 조정 가능한 컴포넌트에서 조정이 일어났을 경우 발생.
ItemEvent - 리스트, 초이스와 같이 선택 항목이 존재하는 컴포넌트에서 선택이 발생할 때 발생
TextEvent - 텍스트 컴포넌트의 내용이 변할 때
하위 레벨 이벤트
ComponentEvent - 컴포넌트의 모습이나 크가 변할 때
ContainerEvent - 컨테이너에 컴포넌트가 추가/삭제되는 경우
FocusEvent - 컴포넌트에 포커스가 들어왔을 때 발생
KeyEvent - 키보드 입력에 의해 발생
MouseEvent - 마우스 움직임에 의해 발생
PaintEvent - 컨포넌트가 그려져야 할 때 발생
WindowEvent - 윈도우가 활성화, 또는 닫힐 때 발생
각 이벤트 리스터가 구현해야 메소드
이벤트 클래스와 마찬가지로 상위 레벨과 하위 레벨로 나눌 수 있으며, 이벤트 리스너 작성은 이벤트리스너 클래스를 구현한 새로운 클래스를 작성하는 방법과 내부 클래스로 이벤트 리스너 클래스를 생성하는 방법이 있다. 이벤트 리스너 클래스와 구현해야 할 메소드의 종류는 다음과 같다.
위의 표와 같이 해당 이벤트 리스너를 구현할 때는 미리 정의된 메소드들을 모두 구현해주어야 한다. 컴포넌트에 리스너를 연결할 때는 addWidowListener() 처럼, addXXXListener() 메소드를 호출하고, 리스너를 제거할 때는 removeXXXListener() 메소드를 호출한다.
하지만, 이벤트 리스너를 구현해야 할 때 미리 정의된 모든 메소드를 구현해야 한다면, 개발자의 작업량이 상당히 많을 것이다. 이에 미리 메소드를 구현해 놓고, 개발자는 해당 이벤트를 수행하는 메소드를 재정의하는 방법을 사용하는데, 미리 메소드를 구현해 놓은 클래스가 Adapter 클래스이다. 각각의 이벤트 리스너 인터페이스는 미리 구현해 놓은 Adapter 클래스를 모두 가지고 있다.
Adapter 클래스 사용
리스너에 구현해야 할 메소드가 하나 뿐이 없는 경우 이벤트 리스너 클래스를 구현하는 것에 무리가 없다. 하지만, KeyListener 인터페이스와 같이 구현해야 할 메소드가 세 개인 경우, 필요한 메소드 하나를 사용하기 위해 세개의 메소드를 모두 선언하고 구현하는 것이 낭비이다.
그래서 자바는 Adapter 클래스를 미리 정의해 놓았다. Adapter 클래스는 리스너 인터페이스의 메소드를 미리 구현해 놓은 클래스이다. 따라서 해당 리스너에서 하나의 메소드만 사용하기 위해서는 Adapter 클래스를 사용하는 것이 좋다.
class WinListener extends WindowAdapter {
public void windowClosing() {
System.exit(0);
}
}
'자바(Java) > JAVA 2SE' 카테고리의 다른 글
사용자 예외 클래스 만들기 (0) | 2010.08.29 |
---|---|
throws 문 사용법 (0) | 2010.08.29 |
이벤트 처리 방법 (0) | 2010.08.29 |
시스템 플랫폼이 지원하는 폰트 리스트 알아보기 (0) | 2010.08.29 |
윈도우 창 생성 방법 (0) | 2010.08.29 |