1. 이벤트 용어 정리
이벤트 소스 : 이벤트를 발생시킨 GUI 컴포넌트
이벤트 객체 : 발생한 이벤트에 대한 여러 정보를 제공하는 객체(이벤트 종류, 이벤트 소스, 화면 좌표, 마우스 버튼 종류, 눌러진 키 등). 이벤트에 따라 서로 다른 정보를 저장한다.
이벤트 리스너 : 사용자가 작성하며, 이벤트를 처리하는 자바 코드. 클래스로 작성한다.
이벤트 분배 스레드 : 무한 루프를 돌면서, 이벤트가 발생하면 이벤트 리스너를 찾아 호출하는 스레드.
2. 이벤트 객체
- 모든 이벤트 객체는 java.utill.EventObject 클래스를 상속받는다.
- 이벤트 객체는 이벤트에 대한 정보를 얻을 수 있는 메소드를 제공한다.
- 모든 이벤트 객체에 공통적으로 있고 가장 많이 사용되는 메소드 getSource() : 어떤 컴포넌트에 이벤트가 발생하였는지 이벤트 소스를 알려줌.
- getSource()는 Object를 리턴하므로 캐스팅 연산자가 필요하다
ex) JButton b = (JButton)event.getSource();
- MouseEvent 이벤트 객체는 이벤트 소스가 Component이므로 모든 GUI 컴포넌트에서 MouseEvent를 발생시킬 수 있다는 뜻이다.
3. 이벤트 리스너
- 이벤트 객체마다 사용할 수 있는 리스너 인터페이스가 자바에서 제공이 된다.
- 사용자가 리스너 클래스를 작성하고 리스너 인터페이스를 상속받아 추상메소드를 모두 구현하면 된다.
- 버튼이 눌리는 이벤트 예시 순서 :
1. 이벤트에 대한 이벤트 리스너와 객체 선택 : ActionListener, ActionEvent
2. 이벤트 리스너 클래스 작성
3. 이벤트 리스너 등록
MyActionListener listener = new MyActionListener();
btn.addActionListener(listener);
4. 익명 클래스의 리스너 작성
btn.addActionListener( /* 객체의 이름 선언 없이 익명으로 1회성 클래스를 리스너로 등록한다. */new ActionListener() { public void actionPerformed(ActionEvent e) { } } );
5. Adapter 클래스
- 리스너 인터페이스를 상속받아 추상메소드를 모두 구현하려면 필요한 메소드만 구현하는 것에 비해 귀찮다.
- 리스너 인터페이스의 추상메소드를 단순 리턴하도록 미리 구현해놓은 클래스를 어댑터 클래스라고 한다.
- 인터페이스 말고 간단하게 어댑터를 상속받아 필요한 메소드만 오버라이딩 하면 된다.
6. keyEvent, mouseEvent -> 안드로이드에서 필요 없으나 추후에 추가 예정
'Programming > Java' 카테고리의 다른 글
troubleshooting #2 throw vs throws (0) | 2020.06.25 |
---|---|
12장. 자바 스레드 기초 (0) | 2020.06.18 |
7장. 컬렉션과 제네릭 #4 제네릭 만들어보기 (0) | 2020.06.17 |
7장. 컬렉션과 제네릭 #3 HashMap 컬렉션, LinkedList 컬렉션 (0) | 2020.06.16 |
7장. 컬렉션과 제네릭 #2 ArrayList 컬렉션, Iterator 인터페이스 (0) | 2020.06.16 |
댓글