본문 바로가기
Programming/Java

9장. 자바의 이벤트 처리

by jaegom 2020. 6. 17.

 

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 -> 안드로이드에서 필요 없으나 추후에 추가 예정

댓글