사용자가 버튼을 누르거나 마우스를 움직이고 키보드를 칠 때 발생하는 동작을 감지하여 코드를 실행시키는 **이벤트 기반 프로그래밍(Event-Driven Programming)**을 학습합니다.
1. 이벤트 처리 모델 3대 요소 (Glossary)
- Event Source (이벤트 소스): 사용자 동작으로 이벤트가 발생한 대상 컴포넌트 객체입니다. (예: 클릭된
JButton) - Event Object (이벤트 객체): 발생한 이벤트의 종류, 발생 시각, 마우스 좌표 등의 정보를 담고 있는 객체입니다. (예:
ActionEvent,MouseEvent,KeyEvent) - Event Listener (이벤트 리스너): 이벤트를 수신하여 처리하는 인터페이스로, 개발자가 내부 메소드를 구현해야 합니다. (예:
ActionListener)
2. 버튼 클릭 이벤트 연동 실습
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class EventHandlingFrame extends JFrame {
private JLabel statusLabel;
private int clickCount = 0;
public EventHandlingFrame() {
setTitle("이벤트 처리 실습");
setSize(350, 150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
JButton actionBtn = new JButton("카운트 증가 버튼");
statusLabel = new JLabel("클릭 횟수: 0회");
// 이벤트 소스에 리스너 등록 (익명 클래스 방식)
actionBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
clickCount++;
statusLabel.setText("클릭 횟수: " + clickCount + "회");
}
});
add(actionBtn);
add(statusLabel);
setVisible(true);
}
public static void main(String[] args) {
new EventHandlingFrame();
}
}
3. 자주 묻는 질문 (Q&A)
Q. 리스너(Listener)와 어댑터(Adapter) 클래스의 차이는 무엇인가요? A. 리스너는 인터페이스이므로 포함된 모든 메소드를 의무 구현해야 하지만, 어댑터 클래스는 리스너를 미리 빈 몸체로 구현해둔 추상 클래스이므로 필요한 메소드만 선택 오버라이딩할 수 있어 편합니다.