자바 Event 핸들러

자바 Event 핸들러


컴포넌트에 따른 적용 Event


1 . Frame : Focus, key, Mouse, MouseMotion, Window.
2 . Label : Focus, Key, Mouse, MouseMotion.
3 . Button : Focus, Key, Mouse, MouseMotion, Action
4 . Checkboox : Focus, Key, Mouse, MouseMotion, item
5 . Choice : Focus, Key, Mouse, MouseMotion, item
6 . List : Focus, Key, Mouse, MouseMotion, Action, Item
7 . TextField : Focus, Key, Mouse, MouseMotion, Action
8 . TextArea : Focus, Key, Mouse, MouseMotion
9 . Dialog : Focus, Key, Mouse, MouseMotion, Window
10 . FileDialog : Focus, Key, Mouse, MouseMotion, Window
11 . Menu : Action
12 . MenuItem : Action
13 . CheckBoxMenuItem : Action, Item
14 . ScrollPane : Focus, Key, Mouse, MouseMotion
15 . PopupMenu : Action
각 컴포넌트에 대해 사용할수 있는 Event클래스들 이다

Event 핸들러


1 . ActionListener ->ActionEvent
2 . FocusListener&FocusAdapter ->FocusEvent
3 . ItemListener ->ItemEvent
4 . KeyListener&KeyAdapter ->KeyEvent
5 . MouseListener&MouseAdapter ->MouseEvent
6 . WindowListener&WindowAdapter ->WindowEvent
위와 같이 구성별로 Listener만 있는 것돠 Adapter와 Listener가 동시에 있는것들이 있다.
원래 AWT에서 그 기준이 된것은 해당 클래스가 포함하고 있는 메서드의 개수였으나
Swing컴포넌트가 나오면서 개념이 바뀌었다

Event 수행 시점


1 . Action : 마우스 클릭이나 키보드의 엔터 키를 누르거나 메뉴에서 아이템을 선택했을 떄
2 . Focus : 커서의 위치가 바뀌면서 특정 객체가 커서를 얻거나 잃을때
3 . Key : 키보드를 눌렀을 때
4 . Mouse : 마우스의 버튼을 누르고 있거나 땠을때 , 혹은 클릭(눌렀다 땜)했을때 , 마우스가 특정 객체의 내부에 들어갔을 때나 특정 객체에서 빠져나왔을 때
5 . MouseMotion : 마우스가 움직이거나 마우스를 드레그 했을 때
6 . Item : List나 Choice 등과 같이 아이템을 가지는 객체의 선택된 아이템에 변화가 있을때
7 . Window : 다이얼로그나 프레임등과 같이 열기 닫기 , 활성 , 비활성, 최소화 등 해당 움직임에 대한 응답이 필요할 때

Event 작성법


  • 특정 Event를 발생시켜 사용하기 위해서는 다음과 같은 순서를 따라야 한다.

Event작성 순서
1 . Event를 발생시키고자 하는 대상 객체와 Event클래스의 종류를 선정
2 . 대상 객체에게 해당 Event의 Handler를 추가한다.
3 . 해당 Event발생시 처리될 내용을 정의한 객체를 생성한다 ->”Event 구현 객체”

Event 추가

  • 대상 객체.addEvent종류Listener(Event_구현_객체);
    여기에서 주의할 점은 해당 대상 객체가 위와같이 [add…Listener(…)]라는 메서드를 가지고 있어야만
    실행이 된다는 사실이다 버튼에 Action Type을 추가하기 위해서는 Button 클래스나
    그 상위의 클래스에 addActionListener(…)와 같은 메서드가 있어야만 한다는 것.

Event 객체 정의 유형
1 . Listener를 구현하거나 Adapter를 상송받은 임의의 클래스를 생성하는 방법
2 . 현재 클래스에 Listener를 구현하는 방법
3 . 익명 중첩 클래스를 사용하는 방법

  • Listener를 구현하거나 Adapter를 상속 받은 임의의 클래스를 생성하는 방법
    이 방법은 앞에서 설명한 Event 구성이라는 곳을 참고로 하여 Listener와 Adapter가 있는지 먼저
    살펴보고, 존재하는 클래스를 상속이라는 방법으로 임의의 클래스를 생성해 내는것
  • 인터페이스로 implement할경우
    ex )
1
2
3
4
5
class ActionDifine implements ActionListener {
public void actionPerformed(ActionEvent e){
재정의 ....
}
}

해당 인터페이스가 가지고 있는 메서드는 전부 추상 메서드이므로 그것들도 전부 재정의해 주어야 한다 .

  • 상속 받을경우
    ex )
1
2
3
4
5
class ActionDifine extends WindowAdapter{
public void windowClosing(WindowEvent e){
재정의 ....
}
}

인터페이스가 아닌 상속의 경우 쓸 메서드만 재정의 한다 .

  • 현재 클래스에 Listener를 구현하는 방법
    이것은 Event구현 객체를 만드는 두 번째 방법으로 첫 번째 방법의 응용이라 생각하면 된다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    ex )
    class Round19_Ex01_Sub extends Frame Implements ActionListener {
    private Button bt = new Button("닫기");
    public Round19_Ex01_Sub(){

    }
    public void init(){

    }
    public void start() {
    bt.addActionListener(this);
    }
    public void actionPerformed(ActionEvent e){
    재정의 ....
    }
    }

현재 자기 자신 클래스를 의미하는 것이다 자신의 클래스 내부에서 자신을 표시할 때 따로 객체를 만들어
표시할 필요는 없다 바로 this라는 것이 자신을 의미하는 객체인 것이다
그래서 객체를 만들지않고 [bt.addActionListener(this);]라고 적으면 그 this가 바로 ACtion타입의
객체 구현이 되는것이다

  • 익명 중첩 클래스를 사용하는 방법
    이 방법은 따로 클래스를 만들거나 현재 클래스에 구현할 필요 없이 필요한 부분마다 빠르게
    Event를 취해 줄 수 있는 방법이다. 단점은 객체의 특징인 재사용이 불가능하다는 점이지만
    간단하고 빠르게 처리할 때 많이 애용된다
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ex )
    this,addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e){
    재정의 .....
    }
    public void windowIconified(WindowEvent e){
    재정의 .....
    }
    });
Share