우리가 제작한 swing시스템을 이용하며 사용자가 키보드로 입력하거나 마우스를 움직이거나 클릭하는 등의 자극을 발생시키는 것을 이벤트가 발생했다고 하며 이벤트가 시스템 내부로 전달되었을 때 이벤트에 반응하여 어떤 일들을 처리할 것인지 구현하는 것을 이벤트처리라 합니다.

자바에서는 간단하게 이벤트를 처리할 수 있습니다. 같이 살펴보시도록 하죠.

이벤트 소스는 이벤트를 발생시키는 원본 객체로 우리가 만들었던 JFrame, JButton, JList, JCheckbox...등이 이에 해당됩니다. 모든 컴포넌트는 이벤트를 발생시키며 여러 개의 이벤트가 동시에 발생되기도 합니다.

 

이벤트가 발생되면 이를 처리하는 객체가 바로 이벤트리스너 입니다.

 

이벤트가 발생되었을때 이를 감지하고 처리하는 리스너는 미리 정해져 있습니다. 당연히 우리가 마음대로 작성하면 안됩니다. 우리가 원하는 대로 작성하고 "이건 이벤트리스너 클래스야" 한다고 자동으로 실행이 될까요? 모든 이벤트가 발생되었을때 자동으로 어떤 일들이 실행되도록 만든다는 것은 곧 우리가 지켜야 하는 규칙과 스펙이 제공되어 있다는 뜻이고 거기에 맞게 잘 만들어야만 반응한다는 뜻입니다.

 

Java라는 언어가 개발되고 swing이라는 컴포넌트가 제작될 때 부터 "이런 이벤트가 발생하면 이런 이벤트리스너의 어떤 메소드를 실행한다" 라는 것이 미리 정해져 있습니다.

 

다만 이벤트가 발생했을때 처리해야 하는 일들이 모두 다르므로 규칙만 제시하고 개발자가 필요하면 하위클래스를 만들어서 작업하도록 해놓은 것이죠. 전형적인 인터페이스의 사용예입니다.

 

아 모두 인터페이스로 되어 있겠다라는 생각이 드시나요?

 

자바 swing시스템 내부에서 인지 해야 하므로 타입은 미리 정해져 있어야 하고 구현은 사용자들마다 모두 다르므로 사용자들 몫으로 남겨놓은 것이죠..

 

자 다시 정리하도록 하겠습니다. 이벤트소스로 부터 이벤트가 발생하면 자바시스템 내부에서는 이벤트객체를 생성하며 미리 등록되어 있는 이벤트리스너의 메소드가 자동으로 호출됩니다. 반응하고 내가 원하는 작업이 처리되도록 하려면 우리는 이벤트리스너 클래스를 상속받아 메소드를 적절하게 오버라이딩해야 합니다.

 

우선 이벤트와 이벤트리스너를 API에서 확인해보도록 하겠습니다.

 

패키지 선택 창에서 java.awt.event패키지를 선택합니다. 이벤트클래스와 이벤트를 처리하는 리스너클래스가 정의되어 있는 패키지입니다.

 

발생되는 이벤트 클래스는 XXXEvent로 정의되어 있고 이벤트가 발생할때 호출될 리스너 클래스는 XXXListener로 정의되어 있습니다.

 

 

만약 ActionEvent가 발생된다면 처리해야 하는 클래스는 ActionListener가 되겠죠?

ActionListener는 상위인터페이스이므로 우리는 상속을 받아 하위클래스를 작성해야 합니다.

 

자, 이제 이벤트를 처리해 보도록 하겠습니다. 이벤트를 처리할때 여러분들께서는 다음과 같은 순서대로 작업을 해야 합니다.

 

[이벤트프로그램 작성 순서]

1. 이벤트 처리를 하기 전에 화면 디자인을 합니다.

2. 발생하는 이벤트에 반응하는 이벤트리스너를 상속받고 메소드를 오버라이딩합니다.

   => 이미 정해져 있기 때문에 거기에 맞게 작성해야 하고 오버라이딩한 메소드 내부에서 비지

        니스로직을 구현합니다.

3. 이벤트 소스와 이벤트리스너 클래스를 연결합니다.

    이벤트소스객체.addXXXListener(리스너객체)

    

 

리스너클래스를 작성하는 방법도 다음과 같습니다.

[리스너클래스의 작성방법]

1. 화면클래스에서 리스너클래스를 직접 구현하기

2. 독립된 클래스로 리스너클래스 구현하기

3. 익명inner클래스로 작성하기

 

천천히 이 방법들을 이용해서 모두 작성해보도록 하겠습니다.

+ Recent posts