46
15 장 . 장장장 장장 1 public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 장 장장 장장장 장장장장장 System.out.println(" 장장장 장장 " + sum + " 장장장 "); } } JAVA

15 장 . 이벤트 처리

Embed Size (px)

DESCRIPTION

15 장 . 이벤트 처리. Java. public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt (a1[0]); b = Integer.parseInt (a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println (" 두수의 합은 " + sum + " 입니다 "); } }. - PowerPoint PPT Presentation

Citation preview

Page 1: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

1

public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println(" 두수의 합은 " + sum + " 입니다 "); }}

JAVA

Page 2: 15 장 .  이벤트 처리

사용자 인터페이스에서 처리할 이벤트의 개요에 관해 학습한다 .

자바의 이벤트 처리 모델에 관해 학습한다 .

자바에서 이벤트가 발생하는 컴포넌트에 관해 학습한다 .

이벤트의 종류에 관해 학습하고 , 각각의 이벤트와 연관된 클래스를 학습한다 .

이벤트 처리를 위한 이벤트 리스너에 대해 학습한다 .

이벤트 처리 프로그램을 작성해보고 , 처리 방법을 학습한다 .

학습목표

2

Page 3: 15 장 .  이벤트 처리

section 1 이벤트란 ?

section 2 자바의 이벤트 모델

section 3 이벤트 관련 컴포넌트

section 4 이벤트 종류 - 4-1 EventObject 클래스와 AWTEvent 클래스

- 4-2 ActionEvent 클래스

- 4-3 AdjustmentEvent 클래스

- 4-4 ComponentEvent 클래스

- 4-5 ContainerEvent 클래스

목차

3

Page 4: 15 장 .  이벤트 처리

- 4-6 FocusEvent 클래스

- 4-7 InputEvent 클래스

- 4-8 ItemEvent 클래스

- 4-9 WindowEvent 클래스

- 4-10 KeyEvent 클래스

- 4-11 MouseEvent 클래스

section 5 이벤트 처리 : 리스너 인터페이스 (Listener Inter-

face)

목차

4

Page 5: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

1 이벤트란 ?

5

이벤트 (event)- 사용자의 입력 , 즉 키보드 , 마우스 등의 장치로부터 발생하는 모든 사건을 의미

이벤트 지향 (event-driven) 프로그램- 프로그램은 무한 루프를 돌면서 사용자의 이벤트가 발생하기를 기다림

- 사용자의 이벤트가 발생하면 , 그 이벤트를 처리하고 다시 무한 루프에 빠지게 됨

Page 6: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

2 자바의 이벤트 모델

6

위임형 이벤트 모델 (delegation event model)- 자바의 이벤트 처리 모델

이벤트의 전달

500 page

Page 7: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

3 이벤트 관련 컴포넌트

7

자바에서의 대부분의 이벤트는 GUI 관련 컴포넌트에서 발생

주요 이벤트를 발생시키는 컴포넌트들의 클래스 계층 구조

501 page

Page 8: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4 이벤트 종류

8

자바에서는 이벤트를 객체로 처리

각 컴포넌트들은 다양한 종류의 이벤트를 발생

이벤트 관련 클래스

자바에서는 이벤트와 연관된 클래스들을 java.awt.event 패키지로 제공502 page

Page 9: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4 이벤트 종류

9

컴포넌트별 사용자의 작동과 관련 이벤트컴포넌트 사용자의 작동 관련 이벤트

JButton 버튼을 누를 때 ActionEvent

JTextField 텍스트 필드에서 리턴키를 칠 때 ActionEvent

JComboBox 새로운 항목을 선택할 때 ItemEvent ActionEvent

JList 항목들을 선택할 때 ListSelectionEvent

JCheckBox 체크박스를 선택할 때 ItemEvent ActionEvent

JRadioButton 라디오 버튼을 선택할 때 ItemEvent ActionEvent

JMenuItem 메뉴 항목을 선택할 때 ActionEvent

JScrollbar 스크롤 바를 움직일 때 AdjustmentEvent

Window 윈도를 열거나 닫을 때 ,  아이콘화할 때 ,  아이콘화된 윈도를 다시 활성화할 때 WindowEvent

Container 컴포넌트가 컨테이너 ( 패널 ,  프레임 등 ) 에 추가되거나 삭제될 때 ContainerEvent

Component 컴포넌트를 움직이거나 ,  크기를 조정할 때 ,  다른 윈도 뒤로 감춰지거나 ,  다시 나타날 때 ComponentEvent

Component 컴포넌트가 마우스의 초점 (focus) 을 가지거나 ,  벗어날 때 FocusEvent

Component Key 가 눌러지거나 띄어질 때 KeyEvent

Component 마우스 버튼이 눌러지고 ,  띄어지고 마우스 초점이 컴포넌트 영역에 들어가고 나올 때 MouseEvent

Component 마우스가 이동 (move) 하고 눌러진 상태에서 끌 때 (dragged) MouseEvent

Page 10: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-1 EventObject 클래스와 AWTEvent 클래스4 이벤트 종류

10

EventObject 클래스- 대부분의 주요 이벤트 클래스들이 EventObject 클래스로부터 상속

EventObject 클래스 생성자

EventObject  클래스의 주요 메소드

EventObject(Object src)형식

메소드 설명Object getSource( ) 이벤트를 발생시킨 객체를 반환

String toString( ) 이벤트 이름을 문자열로 반환

Page 11: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-1 EventObject 클래스와 AWTEvent 클래스4 이벤트 종류

11

AWTEvent 클래스- EventObject 클래스로부터 상속된 클래스

AWTEvent  클래스의 메소드

메소드 설명int getID() 이벤트의 형을 반환한다

Page 12: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-2 ActionEvent 클래스4 이벤트 종류

12

Action 이벤트- 버튼이 눌려졌거나 , 리스트 항목이 선택되었을 때 , 메뉴의 한 항목이 선택되었을 때 발생

- 가장 많이 사용되는 이벤트 클래스

ActionEvent 클래스 생성자

EventObject(Object src)형식

Page 13: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-2 ActionEvent 클래스4 이벤트 종류

13

이벤트가 발생되었을 때 같이 사용된 수정자 (modifier) 키를 구분하기 위한 4 개의 상수를 제공- ALT_MASK : 수정자 키로 ALT 키를 사용

- CTRL_MASK : 수정자 키로 CTRL 키를 사용

- META_MASK : 수정자 키로 META 키를 사용

- SHIFT_MASK : 수정자 키로 SHIFT 키를 사용

ActionEvent  클래스의 주요 메소드

메소드 설명

String getActionCommand( )ActionEvent 를 발생시킨 객체의 이름을 반환한다 .  예를 들어 버튼이 눌러져서 이벤트가 발생하였다면 ,  이 메소드는 버튼의 레이블을 문자열로 반환한다 .

int getModifiers( )이벤트 발생 시 같이 사용된 수정자 키를 (ALT, CTRL, META, SHIFT) 나타내는 상숫값을 반환한다 .

Page 14: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-3 AdjustmentEvent 클래스4 이벤트 종류

14

Adjustment 이벤트- 스크롤 바의 위치가 이동되면 발생

5 가지 유형- BLOCK_DECREMENT : 스크롤 바의 값을 감소시키는 경우

- BLOCK_INCREMENT : 스크롤 바의 값을 증가시키는 경우

- TRACK : 스크롤 바를 드래그 (drag) 하는 경우

- UNIT_INCREMENT : 스크롤 바의 값을 상향 버튼을 사용하여 증가시키는 경우

- UNIT_DECREMENT : 스크롤 바의 값을 하향 버튼을 사용하여 감소시키는 경우

Page 15: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-3 AdjustmentEvent 클래스4 이벤트 종류

15

Adjustment 클래스 생성자

AdjustmentEvent  클래스의 주요 메소드

메소드 설명Adjustable getAdjustable( ) 이벤트를 발생시킨 객체를 반환

int getAdjustmentType( ) 이벤트의 유형을 반환

int getValue( ) 스크롤의 이동 값을 반환

AdjustmentEvent(Adjustable src, int id, int adjustment_type, int data)형식

Page 16: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-4 ComponentEvent 클래스4 이벤트 종류

16

Component 이벤트- 컴포넌트가 감춰지거나 , 감춰진 상태에서 다시 나타날 때 , 이동하였을 때 , 크기를

조정하였을 때 발생

5 개의 하위 클래스- COMPONENT_HIDDEN : 컴포넌트가 감추어질 때

- COMPONENT_SHOWN : 감추어진 컴포넌트가 다시 나타날 때

- COMPONENT_MOVED : 컴포넌트가 이동하였을 때

- COMPONENT_RESIZED : 컴포넌트의 크기가 변동되었을 때

Page 17: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-4 ComponentEvent 클래스4 이벤트 종류

17

ComponentEvent 클래스 생성자

ComponentEvent  클래스의 메소드

메소드 설명Component getComponent() 이벤트를 발생시킨 컴포넌트 객체를 반환한다

ComponentEvent(Component src, int type)형식

Page 18: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-5 ContainerEvent 클래스4 이벤트 종류

18

Container 이벤트- Container 에 컴포넌트 객체가 추가되거나 제거될 때 발생

이벤트의 유형을 구분하기 위해 2 개의 상수를 제공- COMPONENT_ADDED : 컴포넌트가 컨테이너에 추가될 때

- COMPONENT_REMOVED : 컴포넌트가 컨테이너에서 제거될 때

Page 19: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-5 ContainerEvent 클래스4 이벤트 종류

19

ContainerEvent 클래스 생성자

ContainerEvent  클래스의 주요 메소드

메소드 설명Container getContainer( ) 이벤트를 발생시킨 컨테이너를 반환

Component getChild( ) 컨테이너에 추가되거나 제거된 컴포넌트를 반환

ContainerEvent(Component src, int type, Component comp)형식

Page 20: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-6 FocusEvent 클래스4 이벤트 종류

20

Focus 이벤트- 컴포넌트가 마우스의 초점 (focus) 을 획득하거나 초점을 잃었을 때 발생

FocusEvent 클래스 생성자

이벤트의 유형을 구분하기 위해 2 개의 상수를 사용- FOCUS_GAINED : 컴포넌트가 마우스의 초점을 얻었을 때

- FOCUS_LOST : 컴포넌트가 마우스의 초점을 잃었을 때

FocusEvent(Component src, int type)형식

Page 21: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-7 InputEvent 클래스4 이벤트 종류

21

InputEvent 클래스- 추상 클래스로

- Component 클래스로부터 상속된 클래스

수정키를 구분하기 위하여 7 개의 상수를 가짐- ALT_MASK : 수정자 키로 ALT 키를 사용

- BUTTON1_MASK : 첫 번째 마우스의 버튼 사용 ( 보통 마우스는 3 개의 버튼 사용 )

- BUTTON2_MASK : 두 번째 마우스 버튼 사용

- BUTTON3_MASK : 세 번째 마우스 버튼 사용

- CTRL_MASK : 수정자 키로 CTRL 키를 사용

- META_MASK : 수정자 키로 META 키를 사용

- SHIFT_MASK : 수정자 키로 SHIFT 키를 사용

Page 22: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-7 InputEvent 클래스4 이벤트 종류

22

InputEvent  클래스의 주요 메소드

메소드 설명boolean isAltDown( ) 수정자 키로 ALT  키가 사용되었으면 true,  아니면 false 를 반환

boolean isControlDown( ) 수정자 키로 CTRL 키가 사용되었으면 true,  아니면 false 를 반환

boolean isMetaDown( ) 수정자 키로 META 키가 사용되었으면 true,  아니면 false 를 반환

boolean isShiftDown( ) 수정자 키로 SHIFT 키가 사용되었으면 true,  아니면 false 를 반환

int getModifiers( ) 이벤트 발생 시 같이 사용된 수정자 키를 반환

Page 23: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-8 ItemEvent 클래스4 이벤트 종류

23

ItemEvent- 체크박스나 리스트 항목이 선택되었을 때 또는 메뉴의 한 항목이 선택되었거나 선택된

항목이 해제될 때 발생

이벤트의 유형을 구분하기 위한 두 개의 상수를 제공- SELECTED : 한 항목이 선택되었을 때

- DESELECTED : 선택된 항목이 해제되었을 때

Page 24: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-8 ItemEvent 클래스4 이벤트 종류

24

ItemEvent 클래스 생성자

ItemEvent  클래스의 주요 메소드

메소드 설명Object getItem( ) 이벤트를 발생시킨 객체를 반환

ItemSelectable getItemSelectable( )이벤트를 발생시킨 ItemSelectable  객체를 반환한다 .  리스트나 선택 박스 등은 ItemSelectable  인터페이스를 이용하여 구현한다 .

int getStateChange( ) 이벤트의 발생으로 변환된 상태를 상수로 반환

ItemEvent(ItemSelectable src, int type, Object entry, int state)형식

Page 25: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-9 WindowEvent 클래스4 이벤트 종류

25

WindowEvent- 윈도와 관련되어 , 윈도가 활성화되거나 아이콘화될 때 , 닫혀질 때 등에 발생

- WindowEvent 클래스는 ComponentEvent 클래스의 하위 클래스

이벤트의 유형을 구분하기 위한 다섯개의 상수를 사용- WINDOW_ACTIVATED : 윈도가 활성화될 때

- WINDOW_CLOSED : 윈도가 닫힐 때

- WINDOW_CLOSING : 사용자의 요청으로 윈도가 닫힐 때

- WINDOW_ICONIFIED : 윈도가 아이콘화 될 때

- WINDOW_OPENED : 윈도가 생성될 때

Page 26: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-9 WindowEvent 클래스4 이벤트 종류

26

WindowEvent 클래스 생성자

ComponentEvent  클래스의 메소드

메소드 설명Window getWindow() 이벤트를 발생시킨 Window  객체를 반환한다 .

WindowEvent(Window src, int type)형식

Page 27: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-10 KeyEvent 클래스4 이벤트 종류

27

KeyEvent- 키보드로부터 입력이 일어날 때 발생

이벤트의 유형을 구분하기 위해 3 개의 상수를 사용- KEY_PRESSED : 키가 눌러졌을 때

- KEY_RELEASED : 키가 띄어졌을 때

- KEY_TYPED : 키에 의해 문자가 생성되었을 때

Page 28: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-10 KeyEvent 클래스4 이벤트 종류

28

KeyEvent 클래스 생성자

ComponentEvent  클래스의 메소드

메소드 설명char getKeyChar() 입력된 문자 값을 반환한다

KeyEvent(Component src, int type, long when, int modifiers, int code)KeyEvent(Component src, int type, long when, int modifiers, int code, char 

ch)

형식

Page 29: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-11 MouseEvent 클래스4 이벤트 종류

29

MouseEvent- 매우 다양한 형태로 발생

- 사용자가 마우스를 이용하여 작동하는 대부분의 행동에 이벤트가 발생

이벤트의 유형을 구분하기 위해 7 개의 상수를 사용- MOUSE_CLICKED : 마우스 클릭

- MOUSE_DRAGGED : 마우스 드래그

- MOUSE_ENTERED : 마우스가 컴포넌트 영역에 진입

- MOUSE_EXITED : 마우스가 컴포넌트 영역에서 나왔을 때

- MOUSE_MOVED : 마우스가 이동할 때

- MOUSE_PRESSED : 마우스가 눌러졌을 때

- MOUSE_RELEASED : 마우스가 띄어졌을 때

Page 30: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

4-11 MouseEvent 클래스4 이벤트 종류

30

MouseEvent 클래스 생성자

ComponentEvent  클래스의 메소드

메소드 설명int getX( ) 이벤트가 발생한 위치의 x  값을 반환

int getY( ) 이벤트가 발생한 위치의 y  값을 반환

Point getPoint()이벤트가 발생한 위치를 Point  객체로 반환 . Point  클래스는 java.

awt  패키지에 제공되는 클래스로 이 클래스의 객체는 이벤트가 발생한 위치의 x, y  값을 가진다 .

void translatePoint(int x, int y) 이벤트의 발생 위치를 x, y  값으로 변환

int getClickCount() 마우스가 눌러진 횟수를 반환

MouseEvent(Component src, int type, long when, int modifiers, int x, int y, int clicks, boolean triggersPopup)

형식

Page 31: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

5 이벤트 처리 : 리스너 인터페이스 (Listener Interface)

31

이벤트 리스너 인터페이스를 이용하여 이벤트를 처리하기 위한 순서- 처리할 이벤트의 종류를 결정한다 .

- 이벤트에 적합한 이벤트 리스너 인터페이스를 사용하여 클래스를 작성

- 이벤트를 받아들일 각 컴포넌트에 리스너를 등록

- 리스너 인터페이스에 선언된 메소드를 오버라이딩하여 이벤트 처리 루틴 작성

ava.awt.event 패키지- 각각의 이벤트 클래스와 연관된 이벤트 리스너 인터페이스를 제공

Page 32: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

5 이벤트 처리 : 리스너 인터페이스 (Listener Interface)

32

이벤트 클래스와 인터페이스 ,  인터페이스에 선언된 메소드

이벤트 클래스 리스터 인터페이스 리스터 인터페이스 메소드ActionEvent ActionListener actionPerform(ActionEvent ae)

AdjustmentEvent AdjustmentListeneradjustmentValueChanged(AdjustmentEvent ae)

ComponentEvent ComponentListener

componentHidden(ComponentEvent ce)componentMoved(ComponentEvent ce)componentResized(ComponentEvent ce)componentShown(ComponentEvent ce)

ContainerEvent ContainerListenercomponentAdded(ContainerEvent ce) componentRemoved(ContainerEvent ce)

FocusEvent FocusListenerfocusGained(FocusEvent fe)focusLost(FocusEvent fe)

ItemEvent ItemListener itemStateChanged(ItemEvent ie)

KeyEvent KeyListenerkeyPressed(KeyEvent ke)keyReleased(KeyEvent ke)keyTyped(KeyEvent ke)

Page 33: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

5 이벤트 처리 : 리스너 인터페이스 (Listener Interface)

33

이벤트 클래스와 인터페이스 ,  인터페이스에 선언된 메소드

이벤트 클래스 리스터 인터페이스 리스터 인터페이스 메소드ListSelectionEvent ListSelectionListener valueChange(ListSelectionEvent lse)

MouseEvent MouseListener

mouseClicked(MouseEvent me)mouseEntered(MouseEvent me)mouseExited(MouseEvent me)mousePressed(MouseEvent me)mouseReleased(MouseEvent me)

MouseEvent MouseMotionListenermouseDragged(MouseEvent me)mouseMoved(MouseEvent me)

WindowEvent WindowListener

windowActivated(WindowEvent we)windowClosed(WindowEvent we)windowClosing(WindowEvent we)windowDeactivated(WindowEvent we) windowDeiconified(WindowEvent we)windowIconified(WindowEvent we)windowOpened(WindowEvent we)

Page 34: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

5 이벤트 처리 : 리스너 인터페이스 (Listener Interface)

34

Component 클래스는 이벤트 리스너를 등록하고 해제하는 메소드를 제공

Component  클래스에서 제공되는 리스너 등록 및 해제 메소드

메소드 설명public  synchronized  void  addComponentListener(ComponentListener listener)

마우스 리스너를 컴포넌트에 등록한다

public synchronized void addFocusListener(FocusListener listener)

public synchronized void addKeyListener(KeyListener listener)

public synchronized void addMouseListener(MouseListener listener)

public synchronized void addMouseMotionListener(MouseMotionListener listener)

public synchronized void removeComponentListener(ComponentListener listener) 리스너를 컴포넌트에서 해

제한다

Page 35: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

5 이벤트 처리 : 리스너 인터페이스 (Listener Interface)

35

Component  클래스에서 제공되는 리스너 등록 및 해제 메소드

메소드 설명public  synchronized  void  removeFocusListener(FocusListener listener)

리스너를 컴포넌트에서 해제한다

public synchronized void removeKeyListener(KeyListener listener)

public  synchronized  void  removeMouseListener(MouseListener listener)

public synchronized void removeMouseMotionListener(MouseMotionListener listener)

Page 36: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

MouseEventTest.java

0102030405060708091011121314151617181920

import javax.swing.*; import java.awt.*; import java.awt.event.*; class MouseEventPanel extends Panel implements MouseListener { public MouseEventPanel() { addMouseListener(this); } public void mouseClicked(MouseEvent me) {

System.out.println("mouseClicked 메소드 수행 "); } public void mouseEntered(MouseEvent me) {

System.out.println("mouseEntered 메소드 수행 "); } public void mouseExited(MouseEvent me) {

System.out.println("mouseExited 메소드 수행 "); } public void mousePressed(MouseEvent me) {

System.out.println("mousePressed 메소드 수행 "); } public void mouseReleased(MouseEvent me) {

5 이벤트 처리 : 리스너 인터페이스 (Listener Interface)

36

실습문제

이벤트 처리를 위해 이벤트 패키지를 포함이벤트 처리를 위해 관련 인터페이스를 포함

컴포넌트 (this)에 이벤트 리스너 등록

마우스 클릭 시 처리 루틴

마우스가 들어왔을 때 처리 루틴

마우스가 빠져나갔을 때 처리 루틴

마우스가 눌러졌을 때 처리 루틴

마우스가 띠어졌을 때 처리 루틴

Page 37: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

실습문제MouseEventTest.java

212223242526272829303132333435363738

System.out.println("mouseReleased 메소드 수행 "); }}class MouseEventFrame extends JFrame{ public MouseEventFrame() { Container ct = getContentPane(); ct.add(new MouseEventPanel()); setTitle("MouseEvent Test"); setSize(300,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); }}public class MouseEventTest { public static void main(String[] args) { new MouseEventFrame(); }}

5 이벤트 처리 : 리스너 인터페이스 (Listener Interface)

37

Page 38: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

프로그램 설명- 03 :  이벤트를 처리하기 위해서는 java.awt.event.*  패키지를 사용해야 한다 .

- 04 :  컴포넌트에서 이벤트를 처리하기 위해서는 클래스를 작성할 때 이벤트와 연관된 이벤트 리스너를 포함하여 작성하여야 한다 .  이 프로그램의 경우에는 패널에서 이벤트를 처리하기 위해 패널을 만드는 클래스에서 이벤트 리스너를 포함하였다 .  사용자는 응용 프로그램에서 처리할 이벤트의 형태에 따라 적합한 이벤트 리스너를 선택해야 한다 .

- 06 :  이벤트 리스너를 처리할 컴포넌트에 등록하여야 한다 .  처리할 컴포넌트를 this 로 지정하였다 . this 는 현재의 객체를 의미한다 .  즉 현재의 객체 ( 컴포넌트 객체 ) 에 이벤트 리스너를 등록한다 .  당연히 클래스 작성 시 포함한 이벤트 리스너를 등록하여야 한다 .

- 08~22 :  실질적인 이벤트 처리 루틴을 작성한다 .  이 루틴은 클래스 작성 시 포함한 리스너 인터페이스에 선언된 메소드이다 .  이 메소드를 오버라이딩하여 이벤트를 처리하여야 한다 .

5 이벤트 처리 : 리스너 인터페이스 (Listener Interface)

38

Page 39: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

5 이벤트 처리 : 리스너 인터페이스 (Listener Interface)

39

Page 40: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

5 이벤트 처리 : 리스너 인터페이스 (Listener Interface)

40

실습예제KeyEventTest.java

0102030405060708091011121314151617181920

import javax.swing.*; import java.awt.*; import java.awt.event.*; class KeyEventPanel extends JPanel implements KeyListener { private int x = 100; private int y = 100; private char keyChar = 'A'; public KeyEventPanel() { addKeyListener(this); } public void keyReleased(KeyEvent ke) { } public void keyTyped(KeyEvent ke) { } public void keyPressed(KeyEvent ke) { keyChar = ke.getKeyChar(); repaint(); } protected void paintComponent(Graphics g) { super.paintComponent(g); g.setFont(new Font("TimesRoman", Font.PLAIN, 24)); g.drawString(String.valueOf(keyChar), x, y);

이벤트 처리를 위해 관련 인터페이스를 포함

묵시적으로 대문자 ‘ A’를 설정

리스너를 등록

키가 눌러졌을 때 문자 값을 구한다repaint() 메소드는 paintComponent() 메소드를 호출한다

글자를 나타낼 좌표 설정

글자를 패널에 출력하는 메소드

글자를 위치에 그린다

Page 41: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

5 이벤트 처리 : 리스너 인터페이스 (Listener Interface)

41

실습예제KeyEventTest.java

21222324252627282930313233343536373839

}}class KeyEventFrame extends JFrame{ public KeyEventFrame() { Container ct = getContentPane(); KeyEventPanel kep = new KeyEventPanel(); kep.setFocusable(true); ct.add(kep); setTitle("KeyEvent Test"); setSize(200,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); }}public class KeyEventTest { public static void main(String[] args) { new KeyEventFrame(); }}

패널이 키보드 입력을 받아들이도록 설정

Page 42: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

5 이벤트 처리 : 리스너 인터페이스 (Listener Interface)

42

프로그램 설명- 04 :  컴포넌트에서 이벤트를 처리하기 위해서는 클래스를 작성할 때 이벤트와 연관된 이벤트

리스너를 포함하여 작성하여야 한다 .  이 프로그램의 경우에는 패널에서 키보드의 입력을 처리하기 위해 KeyListener 를 포함하였다 .

- 05~06 :  패널의 글자를 나타낼 위치를 설정하였다 .

- 07 :  패널에 묵시적으로 ‘ A’ 를 나타내기 위해 설정하였다 .

- 09 :  이벤트 리스너를 처리할 컴포넌트에 등록하여야 한다 .  처리할 컴포넌트를 this 로 지정하였다 . this 는 현재의 객체를 의미한다 .

- 14 :  키가 눌러졌을 때 눌러진 키 값을 구한다 .

- 15 : repaint()  메소드는 자동으로 현재의 패널을 지우고 paintComponent()  메소드를 호출한다 . repaint()  메소드는 Component  클래스에 선언된 메소드이다 .

- 17~20 :  글자를 패널에 그리는 메소드이다 .  폰트를 설정하고 ,  문자열을 그리는 메소드이다 .

- 27 :  패널이 키보드를 입력받을 수 있도록 활성화시키는 메소드이다 .

Page 43: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

5 이벤트 처리 : 리스너 인터페이스 (Listener Interface)

43

실행결과- 아래와 같은 창이 뜨게 되고 키보드에서 대문자 ‘ F’ 를 입력한 경우이다 .

Page 44: 15 장 .  이벤트 처리

이벤트란 ? ① 이벤트 (event) 란 사용자의 입력 , 즉 키보드 , 마우스 등의 장치로부터 발생하는

모든 사건을 의미한다 .

② 응용 프로그램은 컴포넌트로부터 발생하는 모든 사용자의 작동 ( 마우스 클릭 ,

키보드 입력 , 마우스 움직임 등 ), 즉 이벤트를 처리할 수 있어야 한다 .

자바의 이벤트 모델 및 이벤트 관련 컴포넌트 ① 자바의 이벤트 처리 모델은 위임형 이벤트 모델 (delegation event model) 이다 .

② 위임형 모델은 GUI 의 한 컴포넌트에서 이벤트가 발생되면 , 하나 또는 하나 이상의 이벤트 리스너 (listener) 에 이벤트 처리를 넘겨주는 방식이다 .

③ 자바는 GUI 관련 컴포넌트 (AWT, Swing) 에서 대부분의 이벤트가 발생한다 .

학습정리

44

Page 45: 15 장 .  이벤트 처리

이벤트 종류 ① 자바에서는 이벤트를 객체로 처리한다 . 객체로 처리한다는 의미는 클래스를 가진다는

의미이다 . 자바에서는 이벤트와 연관된 클래스들을 java.awt.event 패키지로 제공하고

있다 .

② 각 컴포넌트들은 다양한 종류의 이벤트를 발생시킨다 .

③ JVM 은 각 컴포넌트에 이벤트가 발생하면 , 관련된 이벤트 클래스로부터 객체를 생성해서

해당 처리 루틴에 넘겨주게 된다 .

이벤트 처리 : 이벤트 리스너 ① 사용자는 이벤트를 처리할 클래스를 작성할 때 적합한 이벤트 리스너를 포함하여

작성하여야 한다 .

② 이벤트 리스너 인터페이스를 이용하여 이벤트를 처리하기 위해 다음과 같은 순서로

프로그램을 작성하여야 한다 .

처리할 이벤트의 종류를 결정한다 .

이벤트에 적합한 이벤트 리스너 인터페이스를 사용하여 클래스를 작성한다 .

이벤트를 받아들일 각 컴포넌트에 리스너를 등록한다 .

리스너 인터페이스에 선언된 메소드를 오버라이딩하여 이벤트 처리 루틴을 작성한다 .

학습정리

45

Page 46: 15 장 .  이벤트 처리

15 장 . 이벤트 처리

46

수고하셨습니다 .질문 있습니까 ?