페이지

2015. 1. 20.

[JAVA] Day10. java.awt.event

이벤트 처리


이벤트 정의


 - 이벤트는 window programing에서 어떤 특정한 행동이 발생한 그 자체를 의미한다.
 - 예를 들어 메뉴를 선택 했다든가, 마우스를 클릭하거나, 윈도우의 크기를 조절하는 행위
 - 이런 방식의 프로그래밍을 이벤트 중심의 프로그래밍이라고 하는데 윈도우 프로그래밍에서 중요한 개념중 하나
 - 이벤트 소스는 이벤트가 발생할 수 있는 대상을 의미하고
 - 그 대상으로 부터 이벤트가 발생하면 발생된 이벤트를 처리해서 결과를 낼 수 있도록 해주는 것을 이벤트핸들러라고 한다.


자바에서 이벤트 처리


 - 프로그램이 실행중에 OS가 해당 프로그램에서 이벤트가 발생이 되는지를 검사
 - 이벤트가 발생되면 OS가 JVM에게 이벤트를 전달하고 JVM은 발생된 이벤트를 처리하기 위하여 이벤트 오브젝트를 생성
 - 이벤트를 처리하기 위하여 이벤트 오브젝트를 가지고 핸들러를 호출



이벤트 소스


 - 이벤트 소스는 이벤트가 발생되는 컴포넌트를 말한다.
 - 즉, 버튼, 채크박스, 리스트, 프레임, 마우스 등과 같은 컴포넌트틀이 이벤트 소스이다.



이벤트 리스너


 - 이벤트 소스에서 이벤트가 발생하는지를 검사하고 있다가 이벤트가 발생이 되면 실제적으로 이벤트를 처리할 수 있도록 만든 인터페이스이다.


이벤트 핸들러


 - 이벤트 리스너에 전달된 이벤트를 실제로 처리할 수 있도록 이벤트 리스너에 포함되어 있는 메소드로 발생된 이벤트 오브젝트를 받아와서 실제적으로 처리해주는 기능을 가지고 있다.






자바에서 이벤트를 판정하고 처리한다.
리스너 : 제이브이엠이 가지고 있는 이벤트 감시자!!
이벤트를 감지하기 위해선 리스너(감시자)를 등록시켜야함
감지 후 리스너는 이벤트에 따르는 핸들러를 호출한다.
즉, 이벤트 종류에 따르는 리스너가 종류별로 다있음
!

가장 대표적인것이 액션 이벤트 >> 예제 참조

import java.awt.*;
import java.awt.event.*;
class  EventEx extends Frame implements ActionListener{
    public void actionPerformed(ActionEvent  e){ // 이벤트 처리
        System.out.println("==발생된 이벤트 정보==");
        System.out.println("getSource() ="+e.getSource());
        System.out.println("toString() ="+e.toString());
        System.out.println("getID() ="+e.getID());
        System.out.println("paramString() ="+e.paramString());
    }
    public EventEx(String title){
        super(title);
        Button b1 = new Button("버튼"); // 이벤트 소스
        b1.addActionListener(new TestEvent()); // 이벤트 리스너 등록, 엑션리스너에 등록!!
        //b1.addActionListener(this); this는 핸들러
        add(b1);
        setSize(300,200);
        show();
    }
    public static void main(String[] args) {
        new EventEx("이벤트");
    }
}

class TestEvent implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        System.out.println("Test Event 핸들러");
    }
}




핸들러를 구성하기 위해서는

이벤트에 따르는 엑션 인터페이스를 일일히 오버라이딩 해야함?


이벤트의 종류들...





import java.awt.event.*;

class AllEventHandler
          implements ActionListener, ComponentListener, MouseMotionListener,
           MouseListener, MouseWheelListener, KeyListener, TextListener,
           FocusListener, ItemListener,  AdjustmentListener, WindowListener,
           WindowFocusListener, WindowStateListener, ContainerListener {
    // ActionListener의 메서드
    public void actionPerformed(ActionEvent ae) {}
    //버튼을 누르거나 등등

    // ComponentListener의 메서드
    public void componentMoved(ComponentEvent ae) {}//움직일떄
    public void componentHidden(ComponentEvent ae) {}//숨겨졌을때
    public void componentResized(ComponentEvent ae) {}//사이즈 조절할때
    public void componentShown(ComponentEvent ae) {}//보여질때
    //동작에 따라 JVM이 해당 이벤트를 알아서 호출

    // MouseMotionListener의 메서드
    public void mouseDragged(MouseEvent me) {}//드레그할때
    public void mouseMoved(MouseEvent me) {}//움직일때

    // MouseListener의 메서드
    public void mousePressed(MouseEvent me) {}//누를떄
    public void mouseReleased(MouseEvent me) {}//누르고 유지
    public void mouseEntered(MouseEvent me) {}//마우스가 해당 영역에 들어갔을때
    public void mouseExited(MouseEvent me) {}//마우스가 빠져나갔을때
    public void mouseClicked(MouseEvent me) {}//클릭

    // MouseWheelListener의 메서드
    public void mouseWheelMoved(MouseWheelEvent e) {}
   
    // KeyListener의 메서드
    public void keyPressed(KeyEvent ke) {}
    public void keyReleased(KeyEvent ke) {}
    public void keyTyped(KeyEvent ke) {}
   
    // TextListener의 메서드
    public void textValueChanged(TextEvent te) {}//글자가 바뀠을때
   
    // FocusListener의 메서드
    public void focusGained(FocusEvent fe) {}
    public void focusLost(FocusEvent fe) {}
   
    // ItemListener의 메서드
    public void itemStateChanged(ItemEvent ie) {}//체키박스나 라디오버튼
   
    // AdjustmentListener의 메서드
    public void adjustmentValueChanged(AdjustmentEvent ae) {}//스크롤바가 움직일때
   
    // WindowListener의 메서드
    public void windowClosing(WindowEvent we) {}//x버튼 활성화시킬 때
    public void windowOpened(WindowEvent we) {}//창이 열렸을 때
    public void windowIconified(WindowEvent we) {}//창이 최소화 되었을 때
    public void windowDeiconified(WindowEvent we) {}//최소화 되었다 다시 올라올 때
    public void windowClosed(WindowEvent we) {}//닫힐 때
    public void windowActivated(WindowEvent we) {}//활성화 상태일 때
    public void windowDeactivated(WindowEvent we) {}//비활성화 상태일 때
   
    // WindowFocusListener의 메서드
    public void windowGainedFocus(WindowEvent e) {}
    public void windowLostFocus(WindowEvent e) {}
   
    // WindowStateListener의 메서드
    public void windowStateChanged(WindowEvent e) {}
   
    // ContainerListener의 메서드
    public void componentAdded(ContainerEvent ce) {}
    public void componentRemoved(ContainerEvent ce) {}
} // End of EventHandler class




이 중에 하나만 쓰려고해도 인터페이스 이기떄문에 모든 메서드를 오버라이딩 해야하는 불편함이 있다.

따라서 ~adapter 등등은 이런 불편함을 해소하기위해 인터페이스를 구현해 놓았다.
예를 들어 WindowAdapter





//WindowEx1.java 참조 <<일일히 구현해 놓았음
/*
import java.awt.*;
import java.awt.event.*;
class  WindowEx1 extends Frame implements WindowListener{
    public WindowEx1(String str){
        super(str);
        addWindowListener(this);
        setSize(200,100);
        setVisible(true);
    }
    public void windowActivated (WindowEvent  e) {
        System.out.println("windowActivated");
    }
    public void windowClosed (WindowEvent  e) {
         System.out.println("windowClosed");
     }    
    public  void windowClosing (WindowEvent  e) {
        System.out.println("windowClosing");
        System.exit(0);
    }        
    public  void windowDeactivated (WindowEvent  e) {
        System.out.println("windowDeactivated");
    }      
    public  void windowDeiconified (WindowEvent  e) {
        System.out.println("windowDeiconified");
    }       
    public  void windowIconified (WindowEvent  e){
        System.out.println("windowIconified");
    }      
    public  void windowOpened (WindowEvent  e) {
        System.out.println("windowOpened");
    }
    public static void main(String [] args){
        new WindowEx1("test");
    }
}


*/



이것을 이렇게 Adapter를 이용하여 필요한 것만 오버라이딩 하여 사용할 수 있다.!!


import java.awt.*;
import java.awt.event.*;
class  WindowEx1 extends Frame{
    public WindowEx1(String str){
        super(str);
        addWindowListener(new WindowEx());
        setSize(200,100);
        setVisible(true);
    }
    public static void main(String [] args){
        new WindowEx1("이벤트");
    }
}

class WindowEx extends WindowAdapter
{
    public  void windowClosing (WindowEvent  e) { //필요한 것만 오버라이딩
        System.out.println("windowClosing");
        System.exit(0);
    }   

}