: Event - 무슨 일이 언제 일어났는지를 설명해주는(알려주는) 객체
: Event sources - Event 를 발생시킨 것 (발생된 장소-객체)
: Event handlers - Event가 발생하면 사용자가 원하는 어떤 일을 실제로 처리하는 행동을 하는 객체
- Event Handling 순서
1. EventSource/Event/EventHandler를 알아낸다. (Component)
: EventSource객체가 가지고 있는 add●●●Listener 를 찾아본다.
addActionListener(ActionListener l) : Component를 눌렀을 때 발생 (가장 중요 - 클래스도 있지만 대부분 인터페이스로 구현받아서 사용)
addChangeListener(ChangeListener l) : 리스트, 라디오버튼 등의 내용이 바뀌었을때(클릭되었을 때) 발생
: 예)java.awt.Button객체는 addActionListener메소드를 가지고 있다. 즉 Button에서는 ActionEvent가 발생한다.
2. 특정 Event를 처리하는 Event Handler Class 구현
: ●●● Listener 형식의 이름을 갖는 interface 들을 implements 하는 class 를 작성
// ●●● Listener 안에 있는 메소드들을 모두 오버라이딩 후 인수를 호출한다.
3. EventSource객체에 EventHandler객체 등록 (관계를 지어준다)
: EventSource가 될수 있는 모든 자바객체는 반드시 하나이상의 add●●●Listener 메소드를 가지고 있다.
: EventSource의 add●●●Listener 메소드는 ●●●Listener 객체를 인수로 받는다.
: ●●●Listener객체는 ●●●Event를 처리하기 위해 프로그래머가 작성.
: EventSource객체.add●●●Listener(EventListener객체) 이용.
- EventTest.java 소스 (첫 번째 방법)
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class EventTest extends JFrame implements ActionListener {
JTextArea ta;
JButton button;
public EventTest() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 컴포넌트 객체 생성
ta = new JTextArea();
button = new JButton("클릭");
// EventTest3 ie =new EventTest3(); // EventTest3 테스트를 위한 소스
// 버튼에 이벤트를 부착
button.addActionListener(this); // implements ActionListener - 내 클래스에서 받았으므로 this
// iframe에 부착
add(ta);
add("North", button);
setTitle("Hello");
setSize(400, 300);
setVisible(true);
}
public static void main(String[] args) {
new EventTest();
}
@Override // interface를 구현하였으므로 ActionListener의 actionPerformed 오버라이딩 필요
public void actionPerformed(ActionEvent e){
// 텍스트 에어리어에 데이터를 출력
// ta.setText("윗쪽 버튼이 눌려졌네요"); // 버튼을 누르면 이벤트를 한번 적용
ta.append("윗쪽 버튼이 눌려졌네요" + "\n"); // 버튼이 눌릴때마다 이벤트 적용
}
}
- EventTest2.java 소스 (두 번째 방법)
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class EventTest2 extends JFrame {
JTextArea ta;
JButton button;
public EventTest2() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 컴포넌트 객체 생성
ta = new JTextArea();
button = new JButton("클릭");
// 버튼에 이벤트를 부착
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ta.append("위쪽 버튼이 눌려졌네요" + "\n");
}
});
// iframe에 부착
add(ta);
add("North", button);
setTitle("Hello");
setSize(400, 300);
setVisible(true);
}
public static void main(String[] args) {
new EventTest2();
}
}
- EventTest3.java 소스 (세 번째 방법)
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class EventTest3 implements ActionListener {
@Override
public void actionPerformed(ActionEvent e){
EventTest.ta.append("안편해요");
}
}
- 결과