본문 바로가기

JAVA

#9 Event 처리

<Event처리> 컴포넌트에 기능을 정의하자!!

- Event : 사건 (~했을때)

예) Button을 눌렀을때

Scrollbar조절바를 움직였을때

TextField에 글자를 썼을때

Frame우측상단의 X버튼을 클릭했을때

- 컴포넌트에 사건이 발생했을 때 기능을 부여하는 것.

1. 컴포넌트에 적용할 이벤트를 분석.


2. EventListener(인터페이스) 상속.

----> implements (구현의 약속)

※ 인터페이스 만드는 방법

- 분석된 이벤트클래스에서 Event대신 Listener붙임!!

예) ActionEvent -----> ActionListener

ItemEvent -----> ItemListener

MouseEvent -----> MouseListener

3. 메소드 구현 (이벤트 핸들러). <==== 기능 정의

class A extends Frame implements ActionListener{

public void actionPerformed(ActionEvent e){ ==> 이벤트처리부(EventHandler)

//코드: 이벤트 발생시(예:버튼 눌림) 실행할 기능 구현!!

}

}

4. 감시자(연결자)메소드 호출 등록.

(EventSource와 EventHandler를 연결!!)

이벤트소스(이벤트 발생시키는 컴포넌트) 이벤트처리부

Button actionPerformed()메소드

TextField

List

형식) 이벤트소스명.add인터페이스명(이벤트핸들러위치); //----> 연결자 등록

위치) setSize(); setVisible(); 이후에 기술하는 것이 좋다.

예)

.....

setSize(300,300);

setVisible(true);

bt.addActionListener(this);

==> bt(Button)라는 EventSource와

actionPerformed()라는 EventHandler를 연결 시켜주는 역할.


import java.awt.Frame;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

public class A implements ActionListener{

Frame f;

public A(Frame f) {

this.f = f;

}

@Override

public void actionPerformed(ActionEvent e) {//이벤트 처리부

System.out.println("A클래스 만세~!!");

f.setTitle("타이틀변경~!!");

}

}

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

public class B implements ActionListener{

@Override

public void actionPerformed(ActionEvent e) {

System.out.println("안녕~!!");

}

}


<Tip>

1. 버튼에 특수문자 나타내기

---> 키보드 한글 'ᄆ' 누르기

---> 한자키 누르기

---> 특수문자 '▷'찾아서 선택하기

2. 프레임 X버튼 눌렀을때 프로그램 종료하기

---> 기존 작성된 익명의 내부클래스 복사하고 붙여넣기

---> extends Frame시 : addWindowListener()

Frame f 생성시 : f.addWinodwListener()

3. 프로그램 실행 중 예상치 못한 상황에 대한 처리!!

- TextField입력된 데이터 -----> List 옮길때

데이터가 입력되지 않고 엔터를 치면 빈줄이 List에 추가!!

- '▷' 버튼 클릭시 만약 좌측리스트에 선택된 아이템이 없다면

IllegalArgumentException발생!! <== getSelectedItem()경우

ArrayIndexOutOfBoundsException발생!! <== getSelectedIndex()경우