17장 이벤트 처리
DESCRIPTION
17장 이벤트 처리. 17.1 이벤트란 ? 17.2 자바의 이벤트 모델 17.3 이벤트 관련 컴포넌트 17.4 Event 종류 17.5 이벤트 처리 : 리스너 인터페이스 ( Listner Interface) 17.6 이벤트 처리 : 아답터 ( Adapter) 클래스 17.7 내포 ( Inner) 클래스. 17.1 이벤트란?. 컴퓨터 사용자 상호작용 프로그램을 사용자가 직접 조작할 수 있는 응용 프로그램 요구 - PowerPoint PPT PresentationTRANSCRIPT
11
17 장 이벤트 처리
17.1 이벤트란 ?17.2 자바의 이벤트 모델17.3 이벤트 관련 컴포넌트17.4 Event 종류17.5 이벤트 처리 : 리스너 인터페이스 (Listner Interface)17.6 이벤트 처리 : 아답터 (Adapter) 클래스17.7 내포 (Inner) 클래스
22
17.1 이벤트란 ?컴퓨터 사용자
상호작용프로그램을 사용자가 직접 조작할 수 있는 응용 프로그램
요구프로그램은 사용자와 상호작용을 위해 사용자의 요구 (
이벤트 ) 를 감지할 수 있어야 한다이벤트의 발생
사용자프로그램의 타이머 , 카운터의 값이 특정값을 넘었을 경우 등
이벤트 지향 (event-driven) 프로그램이벤트가 발생하기를 기다리는 무한 루프 (infinite loop) 프로그램
33
17.2 자바의 이벤트 모델
위임형 모델 (delegation event model)GUI 의 컴포넌트에서 이벤트가 발생되면 해당되는 리스너
(listener) 에게 이벤트 처리를 넘겨주는 방식이벤트 처리를 위한 컴포넌트에는 해당 리스너가 등록되어
있어야 하며 , 리스너에는 이벤트를 처리할 처리루틴이 포함되어 있어야 한다
GUI 컴포넌트
리스너 리스너 리스너
이벤트 발생발생된 이벤트에 따라 해당 리스너에 이벤트 전달
컴포넌트에 등록된 리스너들
55
17.3 이벤트 관련 컴포넌트
이벤트를 발생시키는 컴포넌트들의 클래스 계층 구조
ButtonCheckboxCanvasChoice PanelContainer ScrollPan Dialog FileDialog
Component Label WindowList FrameScrollbar TextArea
Object TextComponentTextField
MenuBarMenuComponent CheckboxMenuItem
MenuItemMenu PopupMenu
66
17.4 이벤트 종류
이벤트를 객체로 취급각 컴포넌트들은 다양한 이벤트를 발생시킨다자바는 다양한 이벤트와 관련된 이벤트 클래스들을
java.awt.event 패키지로 제공JVM 은 사용자의 조작에 따라 적합한 이벤트를 발생 ( 관련
클래스로부터 이벤트 객체 생성 ) 시킨다
77
17.4 이벤트 종류
Event 관련 클래스
ActionEventAdjustmentEvent
ContainerEventFocusEvent KeyEventInputEvent
Object MouseEvent
EventObject AWTEvent ComponentEventPaintEventWindowEvent
ItemEventTextEvent
88
17.4 이벤트 종류이벤트의 종류ActionEvent 버튼이 눌려지거나 , 리스트의 한 항목이 더블 클릭되어 선택되거나 ,
메뉴의 한 항목이 선택되었을 때 발생AdjustmentEvent 사용자가 스크롤바를 움직였을 때 발생ComponentEvent 컴포넌트가 감춰지거나 , 감춰진 상태에서 다시 나타날 때 , 컴포넌트를
이동하였을 때 , 크기를 조정하였을 때 발생ContainerEvent 컨테이너에 컴포넌트가 추가되거나 제거 되었을 때 발생 (18 장 참조 )FocusEvent 컴포넌트가 키보드 입력을 받아들일 수 있는 초점 (focus) 을 획득하거나 ,
초점을 잃었을 때 발생ItemEvent 체크박스나 리스트의 한 항목이 선택되었을 때 , 메뉴의 한 항목이
선택되거나 , 선택된 항목이 해제되었을 때 발생KeyEvent 키보드로부터 입력이 일어났을 때 발생MouseEvent마우스의 버튼이 눌려지고 띠어질 때 , 움직일 때 , 드래그 (drag) 할 때 ,
마우스의 초점이 컴포넌트 영역에 들어가거나 나올 때 발생TextEvent text area 나 text field 에서 값이 입력될 때 발생WindowEvent 윈도우가 활성화 (activate) 되거나 비활성화 될 때 , 아이콘화 될 때 ,
아이콘으로부터 윈도우로 복구될 때 , 윈도우가 open, close, quit 될 때
발생
99
17.4 이벤트 종류 - 컴포넌트와 이벤트의 관계 이벤트컴포넌트Button 0 0 0 0 0 0Canvas 0 0 0 0 0Checkbox 0 0 0 0 0 0Checkbox- 0MenuItemChoice 0 0 0 0 0 0Component 0 0 0 0 0Container 0 0 0 0 0 0Dialog 0 0 0 0 0 0
0 Frame 0 0 0 0 0 0
0 Label 0 0 0 0 0List 0 0 0 0MenuItem 0 0 0 0Panel 0 0 0 0 0 0Scrollbar 0 0 0 0 0 0TextArea 0 0 0 0 0 0TextField 0 0 0 0 0 0 0Window 0 0 0 0 0 0
0
Action adjust- compo- conta- focus item key mouse mouse- text windowevent ment nent iner event event event event motion event event event event event
1010
17.4 이벤트 종류 - (1) EventObject 클래스와 AWTEvent 클래스
EventObject 클래스생성자
EventObject(Object src)
메소드Object getSource() 이벤트를 발생시킨 객체를 반환String toString() 이벤트 이름을 문자열로 반환
AWTEvent 클래스 이벤트의 유형을 알아내기 위한 메소드 제공
int getID()
1111
17.4 이벤트 종류 - (2) ActionEvent 클래스
버튼이 눌려지거나 , 리스트의 항목이 선택되었을 때 , 메뉴의 한 항목이 선택되었을 때 발생이벤트가 발생하였을 때 같이 사용된 수정자 키를 구분하기 위해 4
개의 상수를 제공ALT_MASK 수정자 키로 ALT 키를 사용 CTRL_MASK 수정자 키로 CTRL 키를 사용META_MASK 수정자 키로 META 키를 사용SHIFT_MASK 수정자 키로 SHIFT 키를 사용
생성자ActionEvent(Object src, int type, String cmd)ActionEvent(Object src, int type, String cmd, int modifiers)
src : 이벤트를 발생한 객체 type : 이벤트의 타입
cmd : 이벤트를 발생시킨 컴포넌트의 레이블
modifiers : 이 벤 트 가 발 생 할 때 같 이 사 용 된 수 정 키 를 의미하는 상수
1212
17.4 이벤트 종류 - (2) ActionEvent 클래스
메소드
String getActionCommand() ActionEvent 를 발 생 시 킨 객 체 의 이름을
반 환 한 다 . 예 를 들 어 버 튼 이 눌려져서
이벤트가 발생하였다면 , 이 메소드는
버튼의 레이블을 문자열로 반환한다 .int getModifiers() 이 벤 트 발 생 시 같 이 사 용 된
수정자키를(ALT, CTRL, META, SHIFT)
나타내는 상수 값을 반환한다 .
1313
17.4 이벤트 종류 - (3) AdjustmentEvent 클래스
스크롤 바의 위치가 이동되면 발생 5 가지의 유형을 구분하기 위해 상수 제공
BLOCK_DECREMENT 스크롤 바의 값을 감소시키는 경우BLOCK_INCREMENT 스크롤 바의 값을 증가시키는 경우TRACK 스크롤 바를 드래그 (drag) 하는 경우UNIT_INCREMENT 스크롤 바의 값을 상향 버튼을 사용하여
증가시키는 경우 UNIT_DECREMENT 스크롤 바의 값을 하향 버튼을 사용하여
감소시키는 경우생성자
AdjustmentEvent(Adjustable src, int id, int type, int data)src : 이벤트를 발생시킨 객체 id : 이벤트를 구분하기 위해 사용되는 상수 이 상수는 ADJUSTMENT_VALUE_CHANGED 로 표시된다 . type : 이벤트의 유형을 의미 data : 이벤트와 관련된 데이터 즉 스크롤 바의 이동 값
1414
17.4 이벤트 종류 - (3) AdjustmentEvent 클래스
메소드
Adjustable getAdjustable() 이벤트를 발생시킨 객체를 반환int getAdjustmentType() 이벤트의 유형을 반환int getValue() 스크롤의 이동 값을 반환
1515
17.4 이벤트 종류 - (4) ComponentEvent 클래스
컴포넌트가 감춰지거나 , 감춰진 상태에서 다시 나타날 때 , 이동하였을 때 , 크기를 조정하였을 때 발생 4 가지 유형을 위한 상수
COMPONENT_HIDDEN 컴포넌트가 감추어질 때COMPONENT_SHOWN 감추어진 컴포넌트가 다시 나타날 때COMPONENT_MOVED 컴포넌트가 이동하였을 때COMPONENT_RESIZED 컴포넌트의 크기가 변동되었을 때
생성자ComponentEvent(Component src, int type)
src : 이벤트를 생성된 컴포넌트 객체를 의미type : 이벤트의 타입을 의미
메소드Component getComponent() 이벤트를 발생시킨 컴포넌트를 반환
1616
17.4 이벤트 종류 - (5) ContainerEvent 클래스
컨테이너에 컴포넌트가 추가되거나 제거될 때 발생 2 가지 유형을 위한 상수
COMPONENT_ADDED 컴포넌트가 컨테이너에 추가될 때COMPONENT_REMOVED 컴포넌트가 컨테이너에서 제거될 때
생성자ContainerEvent(Component src, int type, Component comp)
src : 이벤트를 발생시킨 객체를 의미type : 이벤트의 유형을 지정하는 상수comp : 컨테이너에 추가되거나 제거된 컴포넌트를 의미
메소드Container getContainer() 이벤트를 발생시킨 컨테이너를 반환Component getChild() 컨 테 이 너 에 추 가 되 거 나 제 거 된
컴포넌트를 반환
1717
17.4 이벤트 종류 - (6) FocusEvent 클래스
컴포넌트가 마우스의 초점을 획득하거나 잃었을 때 발생 2 가지 유형을 위한 상수
FOCUS_GAINED 컴포넌트가 마우스의 초점을 얻었을 때FOCUS_LOST 컴포넌트가 마우스의 초점을 잃었을 때
생성자FocusEvent(Component src, int type)
src : 이벤트를 발생시킨 컴포넌트 type : 이벤트의 유형
1818
17.4 이벤트 종류 - (7) InputEvent 클래스
Component 클래스로부터 상속된 클래스로서 추상 클래스이다
하위 클래스로 KeyEvent, MouseEvent 클래스가 제공이벤트의 유형을 구분하기 위한 상수 제공
ALT_MASK 수정자 키로 ALT 키를 사용 BUTTON1_MASK 첫 번째 마우스의 버튼 사용
( 보통 마우스는 3 개의 버튼 사용 )BUTTON2_MASK 두 번째 마우스 버튼 사용BUTTON3_MASK 세 번째 마우스 버튼 사용CTRL_MASK 수정자 키로 CTRL 키를 사용 META_MASK 수정자 키로 META 키를 사용 SHIFT_MASK 수정자 키로 SHIFT 키를 사용
1919
17.4 이벤트 종류 - (7) InputEvent 클래스
메소드boolean isAltDown() 수정자 키로 ALT 키가 사용되었으면 true, 아니면 false 를
반환
boolean isControlDown() 수정자 키로 CTRL 키가 사용되었으면 true, 아니면 false 를 반환
boolean isMetaDown() 수정자 키로 META 키가 사용되었으면 true, 아니면 false 를 반환
boolean isShiftDown() 수정자 키로 SHIFT 키가 사용되었으면 true, 아니면 false를 반환
int getModifiers() 이벤트 발생시 같이 사용된 수정자 키를 반환
2020
17.4 이벤트 종류 - (8) ItemEvent 클래스
체크박스나 리스트 항목이 선택되었을 때 , 메뉴의 한 항목이 선택되었을 때 , 선택된 항목이 해제될 때 발생이벤트의 유형을 구분하기 위한 2 개의 상수 제공
SELECTED 한 항목이 선택되었을 때DESELECTED 선택된 항목이 해제되었을 때
생성자ItemEvent(ItemSelectable src, int type, Object entry, int state)
src : 이벤트를 발생시킨 컴포넌트 type : 이벤트의 유형entry : 이벤트 발생시 전달하고자 하는 특수한 item 객체를 의미state : item 의 현재 상태를 의미
2121
17.4 이벤트 종류 - (8) ItemEvent 클래스
메소드
Object getItem() 이벤트를 발생시킨 객체를 반환ItemSelectable getItemSelectable() 이 벤 트 를 발 생 시 킨
ItemSelectable 객체를 반환 리스트나 선택박스 등은 ItemSelectable
인터페이스를 이용하여 구현 int getStateChange() 이벤트의 발생으로 변환된 상태를 상수로
반환
2222
17.4 이벤트 종류 - (9) KeyEvent 클래스
키보드로부터 입력이 일어날 때 발생이벤트의 유형을 구분하기 위한 3 개의 상수 제공
KEY_PRESSED 키가 눌려졌을 때KEY_RELEASED 키가 띠어졌을 때KEY_TYPED 키에 의해 문자가 생성되었을 때
입력되는 문자를 구분하기 위한 상수VK_0 - VK_9
VK_A - VK_Z, VK_ENTER, VK_ESCAPE, VK_CANCEL 등
2323
17.4 이벤트 종류 - (9) KeyEvent 클래스
생성자KeyEvent(Component src, int type, long when, int modifiers, int
code)KeyEvent(Component src, int type, long when, int modifiers, int
code, char ch)src : 이벤트를 발생시킨 컴포넌트
type : 이벤트의 유형
modifiers : 이벤트 발생시 같이 사용된 수정자 키를 의미
code : 함수키와 같은 특수한 키를 의미
ch : 입력된 문자를 의미
메소드
char getKeyChar() 입력된 문자 값을 반환
2424
17.4 이벤트 종류 - (10) MouseEvent 클래스
마우스의 동작에 따라 이벤트 발생이벤트의 유형을 구문하기 위한 상수 제공
MOUSE_CLICKED 마우스 클릭MOUSE_DRAGGED 마우스 드래그MOUSE_ENTERED마우스가 컴포넌트 영역에 진입MOUSE_EXITED 마우스가 컴포넌트 영역에서 나왔을 때MOUSE_MOVED 마우스가 이동할 때MOUSE_PRESSED 마우스가 눌려졌을 때MOUSE_RELEASED 마우스가 띄어졌을 때
2525
17.4 이벤트 종류 - (10) MouseEvent 클래스
생성자MouseEvent(Component src, int type, long when, int modifiers, int
x, int y, int clicks, boolean triggersPopup)
src : 이벤트를 발생시킨 컴포넌트 int : 이벤트의 유형
modifiers : 이벤트가 발생하였을 때 같이 사용된 수정키를 의미
x, y : 컴포넌트에서 이벤트가 일어난 위치를 의미
clicks : 마우스가 눌러진 횟수
triggersPopup : 이 값이 true 이면 이벤트가 팝업 (popup) 메뉴에서 일어났음을
의미한다
2626
17.4 이벤트 종류 - 10) MouseEvent 클래스
메소드
int getX() 이벤트가 발생한 위치의 x 값을 반환
int getY() 이벤트가 발생한 위치의 y 값을 반환
Point getPoint() 이벤트가 발생한 위치를 Point 객체로 반환
Point 클래스는 java.awt 패키지에 제공되는 클래스로
이 클래스의 객체는 이벤트가 발생한 위치의 x, y 값을 가진다
void translatePoint(int x, int y) 이벤트의 발생위치를 x, y 값으로 변환
int getClickCount() 마우스가 눌러진 횟수를 반환
2727
17.4 이벤트 종류 - (11) WindowEvent 클래스
윈도우가 활성화되거나 , 아이콘화 될 때 , 닫혀질 때 발생이벤트의 유형을 구분하기위한 상수 제공
WINDOW_ACTIVATED 윈도우가 활성화 될 때WINDOW_CLOSED 윈도우가 닫힐 때WINDOW_CLOSING 사용자의 요청으로 윈도우가 닫힐 때WINDOW_ICONIFIED 윈도우가 아이콘화 될 때WINDOW_OPENED 윈도우가 생성될 때
생성자WindowEvent(Window src, int type)
src : 이벤트를 발생시킨 Window 객체 type : 이벤트의 유형을 의미
메소드Window getWindow() 이벤트를 발생시킨 Window 객체를 반환
2828
17.5 이벤트 처리 - 리스너 인터페이스
이벤트 처리를 위해 리스너 인터페이스 (Listner Interface) 를 사용리스너 인터페이스를 사용한 이벤트 처리 순서
1) 처리할 이벤트의 종류를 결정한다2) 이벤트에 적합한 이벤트 리스너 인터페이스를 사용하여 클래스를
작성3) 이벤트를 받아들일 각 컴포넌트에 리스너를 등록4) 리스너 인터페이스에 선언된 메소드를 오버라이딩하여 이벤트 처리
루틴 작성 java.awt.event 패키지에 이벤트와 관련된 이벤트 리스너 인터페이스
제공
2929
17.5 이벤트 처리 - 리스너 인터페이스이벤트 클래스와 인터페이스 , 인터페이스 선언 메소드
이벤트 클래스 리스너 인터페이스 리스너 인터페이스 메소드ActionEvent ActionListener actionPerform(ActionEvent)AdjuntmentEvent AdjustmentListener
adjustmentValueChanged(AdjustmentEvent)ComponentEvent ComponentListener
componentHidden(ComponentEvent)componentMoved(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)
ContainerEvent ContainerListenercomponentAdded(ContainerEvent)
componentRemoved(ContainerEvent)FocusEvent FocusListerner focusGained(FocusEvent)
focusLost(FocusEvent)ItemEvent ItemListener itemStateChanged(ItemEvent)KeyEvent KeyListener keyPressed(KeyEvent)
keyReleased(KeyEvent)keyTyped(KeyEvent)
3030
17.5 이벤트 처리 - 리스너 인터페이스이벤트 클래스와 인터페이스 , 인터페이스 선언 메소드MouseEvent MouseListener mouseClicked(MouseEvent)
mouseEntered(MouseEvent)mouseExited(MouseEvent)mousePressed(MouseEvent)mouseReleased(MouseEvent)
MouseMotionEvent MouseMotionListener mouseDragged(MouseEvent)mouseMoved(MouseEvent)
TextEvent TextListener textValueChanged(TextEvent)WindowEvent WindowListener windowActivated(WindowEvent)
windowClosed(WindowEvent)windowClosing(WindowEvent)
windowDeactivated(WindowEvent)
windowDeiconified(WindowEvent)windowIconified(WindowEvent)windowOpened(WindowEvent)
3131
17.5 이벤트 처리 - 리스너 인터페이스
이벤트를 받아들일 컴포넌트에 이벤트 리스너 등록 및 해제 메소드의 형태
void addTypeListener(TypeListener el)void removeTypeListener(TypeListener el)
Type : 이벤트의 이름
el : 이벤트 리스너를 의미
3232
17.5 이벤트 처리 - 리스너 인터페이스 이벤트 리스너를 등록하고 해제하는 메소드는 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)
public synchronized void removeFocusListener(FocusListener listener)public synchronized void removeKeyListener(KeyListener listener)public synchronized void removeMouseListener(MouseListener listener)public synchronized void removeMouseMotionListener(MouseMotionListener
listener)
3535
17.6 이벤트 처리 - 아답터 (Adapter) 클래스
리스너 인터페이스를 사용하여 이벤트를 처리하는 경우 인터페이스에 선언된 모든 메소드를 오버라이딩하여 구현하여야 한다 ( 불필요한 메소드도 구현 )
자바는 리스너 인터페이스의 기능을 추상 클래스인 아답터 클래스로 제공
ComponentListener ComponentAdapterContainerListener ContainerAdapterFocusListener FocusAdapterKeyListener KeyAdapterMouseListener MouseAdapterMouseMotionListener MouseMotionAdapterWindowListener WindowAdapter
3737
17.7 내포 (inner) 클래스
클래스가 다른 클래스 또는 표현식 내부에 포함되는 것을 의미
내포된 클래스에서는 자신을 포함하고 있는 클래스의 모든 것을 사용할 수 있다 ( 예제 참조 )
3838
17.7 내포 (inner) 클래스
예제 : MouseInnerDemo2.java 프로그램은 이벤트를 받아들일 애플릿 클래스의 내포된 클래스로서 아답터 클래스를 사용하는 예이다 . 내 포 된 클 래 스 를 이 용 하 면 MouseAdapterDemo2.java 프로그램처럼 아답터 클래스의 생성자를 이용하여 객체의 참조를 넘겨받을 필요가 없다 . 내포된 클래스에서는 내포하고 있는 클래스의 메소드를 별도의 참조 없이 바로 사용할 수 있다 .
MouseInnerDemo2.java