자바의 GUI 프로그램은 마우스, 키보드 입력은 물론 버튼, 체크박스, 텍스트 필드 같은 다양한 사용자 컨트롤과의 상호작용을 '이벤트(Event)'로 처리합니다. 이러한 이벤트를 적절히 처리해야 비로소 자바를 이벤트 기반 프로그래밍(Event-Driven Programming)으로 구현할 수 있습니다.
이벤트 핸들링의 구성 요소
자바의 이벤트 핸들링은 크게 세 가지 요소로 구성됩니다.
- 이벤트(Event)
- 이벤트 소스(Event Source)
- 이벤트 리스너/핸들러(Event Listener/Handler)
1. 이벤트(Event)
- 이벤트란 소스 객체의 상태 변화를 설명하는 객체로 정의됩니다.
- 자바는 이러한 이벤트 클래스들을 java.awt.event 패키지 안에 다수 정의해 두고 있습니다.
- 대표적인 이벤트로는 ActionEvent, MouseEvent, KeyEvent, FocusEvent, ItemEvent 등이 있습니다.
2. 이벤트 소스(Event Source)
- 소스(Source)는 이벤트를 발생시키는 객체입니다.
- 객체의 내부 상태가 어떤 방식으로든 변경될 때 이벤트가 생성됩니다.
- 소스는 리스너가 특정 유형의 이벤트에 대한 알림을 받을 수 있도록 반드시 리스너를 등록(register)해야 합니다.
- 대표적인 이벤트 소스로는 Button, CheckBox, List, Choice, Window 등이 있습니다.
3. 이벤트 리스너(Event Listener)
- 리스너(Listener)는 이벤트가 발생했을 때 알림을 받는 객체입니다.
- 리스너가 되기 위한 두 가지 필수 조건은 다음과 같습니다.
- 하나 이상의 소스 객체에 등록되어 이벤트 알림을 받을 수 있어야 합니다.
- 알림을 받아 처리할 메서드를 반드시 구현해야 합니다. - 자바는 java.awt.event 패키지 아래에 이벤트를 수신하고 처리하기 위한 인터페이스 집합을 제공합니다.
- 대표적인 리스너로는 ActionListener, MouseListener, ItemListener, KeyListener, WindowListener 등이 있습니다.
예제 코드
다음은 버튼 클릭 시 ActionEvent를 처리하는 간단한 예제입니다.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class EventListenerTest extends JFrame implements ActionListener {
JButton button;
public static void main(String args[]) {
EventListenerTest object = new EventListenerTest();
object.createGUI();
}
void createGUI() {
button = new JButton(" Click Me !");
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
add(button);
button.addActionListener(this);
}
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == button) {
JOptionPane.showMessageDialog(null, "Generates an Action Event");
}
}
}
실행 결과

위 예제에서 JFrame은 이벤트 소스 역할을 하는 버튼을 포함하고 있으며, 자기 자신(this)을 ActionListener로 등록합니다. 사용자가 버튼을 클릭하면 ActionEvent가 발생하고, actionPerformed() 메서드가 호출되어 다이얼로그 창에 메시지가 표시됩니다.