2013년 7월 4일 목요일

(130704) 9일차 EventTest.java, EventTest2.java, EventTest3.java (AWT Event 설명, Event Handling 순서 - 3가지 방법)

 - AWT Event : Component를 눌렀을 때 어떤 일을 발생시키는 것.
 : 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("안편해요");
}
}


 - 결과