본문 바로가기

자바공부

명품자바프로그래밍 10장, 자바의 이벤트 처리 요약

728x90
반응형

* AWT나 스윙 등 자바의 GUI 프로그래밍은 이벤트 기반 프로그래밍이다.

 

* 이벤트 기반 프로그래밍은 이벤트의 발생에 의해 프로그램 실행 흐름이 결정되는 방식으로 프로그래밍 패러다임이다.

 

* 이벤트는 키 입력, 마우스 클릭, 마우스 드래그 등의 사용자 액션이나, 센서 등 외부 장치로부터의 입력, 네트워크상의 다른 컴퓨터로부터의 데이터 송수신, 혹은 다른 스레드나 프로그램으로부터의 메시지 송수신 등에 의해 발생한다.

 

* 이벤트 소스란 이벤트를 발생시킨 컴포넌트이다.

 

* 이벤트 리스너란 이벤트 핸들러와 동일한 의미로 사용되며 이벤트를 처리하는 객체이다.

 

* 자바에서 다양한 이벤트 리스너 인터페이스를 제공하며, 개발자는 이벤트 리스너를 만들기 위해 이벤트 리스너 인터페이스의 모든 멤버를 반드시 구현하여야 한다.

 

* 이벤트 객체란 발생한 이벤트에 관한 여러 정보를 가진 객체로서 이벤트 발생 시 이벤트 리스너에게 전달된다.

 

* 하나의 컴포넌트는 여러 종류의 이벤트에 대해 리스너를 가질 수 있으며, 하나의 이벤트에 대해 여러 개의 서로 다른 이벤트 리스너를 가질 수 있다.

 

* 이벤트 객체로부터 이벤트 소스 정보를 알아내기 위해 EventObject의 getsource()를 호출하면 된다.

 

* 이벤트 리스너를 작성하는 방법은 하나의 독립된 클래스로 작성하는 방법, 내부 클래스(inner class)로 작성하는 방법, 익명 클래스(annonymous class)로 작성하는 방법 등 3가지 방법이 있다.

 

* 내부 클래스로 이벤트 리스너로 작성하면 자신을 둘러싼 외부 클래스의 멤버롤 마음대로 호출할 수 있기 때문에 유용하다.

 

* 이벤트 리스너 객체를 여러 컴포넌트에 등록하여 사용하는 경우가 아니라면 이벤트 리스너를 익명 클래스로 작성하는 것이 좋다.

 

* 어댑터 클래스(Adapter)는 이벤트 리스너의 모든 멤버가 단순 리턴하도록 구현한 클래스로서 리스너의 모든 메소드를 구현할 필요가 없는 경우에 상속받아 사용하면 편리하다.

 

* Key 이벤트는 모든 컴포넌트에 발생 가능하다. 그러나 오직 현재 포커스를 가진 하나의 컴포넌트만 이벤트를 받는다. 즉, 키 입력은 포커스를 가진 컴포넌트의 키 이벤트 리스너에 의해 처리된다.

 

* 컴포넌트에게 포커스를 강제로 주는 방법은 다음과 같다.

component.requestFocus();

 

* KeyListener는 다음 3개의 메소드를 가지고 있다.

void keyPressed(KeyEvent e); // 키를 누른 순간에 발생하는 Key 이벤트 처리
void keyReleased(KeyEvent e); // 눌러진 키를 놓는 순간에 발생하는 Key 이벤트 처리
void keyTyped(KeyEvent e); // 유니코드 키가 입력된 경우, 눌러진 키를 놓는 순간

 

* KeyEvent는 Key 이벤트 객체이다.

 

* KeyEvent는 유니코드 키가 입력된 경우, 키의 문자 코드를 리턴하는 다음 메소드를 가지고 있다.

char getKeyChar()

 

* KeyEvent는  모든 키에 대해 입력된 키의 코드 값을 리턴하는 다음 메소드를 가지고 있다.

int getKeyCode()

 

* 입력된 키를 판별하기 위해서는 입력된 키 코드 값과 가상 키(Virtual key) 값을 비교하여야 한다. 입력된 키 코드는 운영체제와 하드웨어 플랫폼에 따라 다를 수 있기 때문이다. 가상 키는 KeyEvent 클래스에 상수로 정의되어 있다.

 

* Mouse 이벤트는 모든 컴포넌트에서 발생 가능하며 사용자의 마우스 조작에 따라 7가지 경우에 발생한다.

처음 5개의 메소드는 MouseListener에서, 뒤의 2개는 MouseMotionListener에서 정의된다.

void mouseEntered(MouseEvent e) // 마우스가 컴포넌트 위에 올라갈 때
void mouseExited(MouseEvent e) // 마우스가 컴포넌트에서 내려올 때
void mousePressed(MouseEvent e) // 마우스 버튼이 눌러졌을 때
void mouseReleased(MouseEvent e) // 마우스 버튼이 떼어질 때
void mouseClicked(MouseEvent e) // 마우스로 컴포넌트를 클릭하였을 때
void mouseDragged(MouseEvent e) // 마우스가 드래그되는 동안
void mouseMoved(MouseEvent e) // 마우스가 움직이는 동안

 

* MouseListener의 mouseClicked()는 동일한 컴포넌트에 대해 마우스 버튼이 눌러지고 떼어지는 정상적인 마우스 클릭의 경우에 호출되는 메소드이다.

 

* MouseEvent는 Mouse 이벤트 객체이다.

 

* MouseEvent는 마우스 포인터의 위치를 알려주는 다음 메소드를 가지고 있다.

int getX(), int getY(), Point getPoint()

 

* MouseEvent는 클릭된 마우스 버튼 정보를 알려주는 다음 메소드를 가지고 있다.

int getButton()

 

* MouseEvent는 마우스 클릭 횟수를 알려주는 다음 메소드를 가지고 있다.

int getClickCount()
반응형