자바(Java)/JAVA 2SE

이벤트 처리 방법

본클라쓰 2010. 8. 29. 13:43

 

 이벤트란 사용자가 UI 콤포넌트에 대해 가해지는 행위로 인한 사건을 말한다. 윈도우 프로그램을 Event Base Programming 방식이다. Event Base Programming 은 무한 루프에서 대기하면서 이벤트가 발생하면 해당 동작을 수행하는 방법이다.

 

프로그램은 무한 루프를 돌다가 해당 이벤트가 발생하면 이벤트 리스너(Event Listener, 보통 핸들러라고 부름)를 호출한다. 따라서 콤포넌트마다 발생할 수 있는 이벤트를 분류한 이벤트 클래스들이 존재한다. 이벤트 클래스는 종류에 맞는 정보와 메소드를 가진다.

 

 

이벤트 클래스 계층

 

 

이벤트 처리 방법의 구조

 

 과거 명령어 중심의 처리에서 마우스나 기타 입력장치의 사용으로 모든 입력 신호(마우스 버튼이나 키보드에서 텍스트가 입력되는 경우)를 이벤트로 보고 각각의 이벤트에 맞게 프로그래밍하며, 이벤트를 처리할 때 3가지 요소를 구성하여 처리한다.

  1. 이벤트 소스(Event Source)
  2. 이벤트 클래스(Event Class)
  3. 이벤트 리스터(Event Listener)

 

이벤트 소스

 AWT의 모든 컴포넌트들이다. 즉, 사용자가 마우스나 키보드로 입력을 가할 수 있는 모든 컴포넌트가 이벤트 소스가 된다. 따라서, 모든 컴포넌트들이 이벤트를 발생할 수 있는 이벤트 소스가 된다.

 

이벤트 클래스

 이벤트 소스에서 발생한 이벤트에 대한 정보를 갖고 있는 클래스로, 윈도우 상에 이벤트가 발생하면 자바 VM에서 자동으로 이벤트 클래스를 생성한다. 이 부분은 윈도우 프로그래밍을 하는 모든 프로그래밍에서 동일한 방법으로 이벤트를 객체나 자료형으로 생성하기 때문에 부연 설명을 생략한다.

 

이벤트 리스너

 이벤트 리스너는 이벤트의 실제적인 처리를 담당하는 클래스로, 컴포넌트에 이벤트 리스너를 등록했다면 해당 이벤트가 발생했을 시 자바VM에서 이벤트 클래스를 생성하여 이벤트 리스너 클래스의 구현 메소드를 인자로 하여 호출한다. 따라서 프로그래머는 컴포넌트에 어떤 이벤트가 발생했을 때 그 이벤트를 처리하는 방법에 대해 이벤트 리스너 클래스를 구현해야 한다.

 

 

이벤트 리스너 구현 방법

 

이벤트 리스너를 구현하는 방법은 다양하다. 대표적인 세가지 방법에 대해 알아보자.

  1. 이벤트 리스너 인터페이스를 구현하는 방법
  2. 이벤트 리스너를 구현한 클래스를 사용하는 방법
  3. 내부 클래스로 구현하는 방법

 

 

1. 이벤트 리스터 인터페이스를 구현하는 방법

 

ActionListener 인터페이스를 implements 하여 구현해야 할 메소드를 재정의한다.

public class A implements ActionListener

 

    Button button = new Button("입력");
    button.addActionListener(this);

 

    public void actionPerformed(ActionEvent e) {

        // 이벤트 발생시 처리할 부분 작성 

    }

 

}

 


2. 이벤트 리스너를 구현한 클래스를 사용하는 방법 

 

외부에 미리 이벤트 리스너 클래스를 구현한 후 이벤트 연결은 미리 구현한 클래스를 사용하는 방법이다.

public class  A {

    Button button = new Button("입력");
    button.addActionListener( new B() );

 

}

 

public class B implements ActionListener {

    public void actionPerformed(ActionEvent e) {

        // 이벤트 발생시 처리할 부분 작성 

    }

}

 

 

3. 내부 클래스로 구현하는 방법

 

이벤트를 등록하는 메소드에 내부 클래스로 구현하는 방법이다.

public class  A {

 

    Button button = new Button("입력");

 
    button.addActionListener( new ActionListener() {

        public void actionPerformed(ActionEvent e){

            // 이벤트 발생시 처리할 부분 작성

        }

    });

}

 

 

 

[ 프로그램에 이벤트를 연결하는 방법 예제 ]

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class EventTest extends Frame implements ActionListener{
 
    private int x = 10;
    private int y = 10;
    private int width = 500;
    private int height = 140;
 
    private TextField textField;
    private TextArea textArea;
    private Button button;

 

    public EventTest() {

        super("테스트");
        addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent ev){
               dispose();
               System.exit(0);
            }
        });
  
        textField = new TextField(50);
        textArea = new TextArea(2,64);
        button = new Button("입력");

 

        add(textField);
        add(button);
        add(textArea);

 

        // 이벤트 소스와 리스너 연결
        button.addActionListener(this);

        // 프레임의 레이아웃설정
       setBounds(x, y, width, height);
       setLayout(new FlowLayout());
       setVisible(true);

    }

 


    // 버튼이 눌러졌을 경우 이벤트를 수행하는 actionPerformed 메소드
    public void actionPerformed(ActionEvent e){
        textArea.setText(textField.getText());
    }

  

    public static void main(String[] args) {
        new EventTest();
    }


}

 

[위 코드 실행 파일]

EventTest.jar

 

EventTest.jar
0.0MB

'자바(Java) > JAVA 2SE' 카테고리의 다른 글

throws 문 사용법  (0) 2010.08.29
이벤트 클래스 계층도  (0) 2010.08.29
시스템 플랫폼이 지원하는 폰트 리스트 알아보기  (0) 2010.08.29
윈도우 창 생성 방법  (0) 2010.08.29
컨테이너(Container)   (0) 2010.08.29