1 / 39

17장 이벤트 처리

17장 이벤트 처리. 17.1 이벤트란 ? 17.2 자바의 이벤트 모델 17.3 이벤트 관련 컴포넌트 17.4 Event 종류 17.5 이벤트 처리 : 리스너 인터페이스 ( Listner Interface) 17.6 이벤트 처리 : 아답터 ( Adapter) 클래스 17.7 내포 ( Inner) 클래스. 17.1 이벤트란?. 컴퓨터 사용자 상호작용 프로그램을 사용자가 직접 조작할 수 있는 응용 프로그램 요구

neil-mercer
Download Presentation

17장 이벤트 처리

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 17장 이벤트 처리 17.1 이벤트란? 17.2 자바의 이벤트 모델 17.3 이벤트 관련 컴포넌트 17.4 Event 종류 17.5 이벤트 처리:리스너 인터페이스(Listner Interface) 17.6 이벤트 처리 : 아답터(Adapter) 클래스 17.7 내포(Inner) 클래스

  2. 17.1 이벤트란? • 컴퓨터 사용자 상호작용 • 프로그램을 사용자가 직접 조작할 수 있는 응용 프로그램 요구 • 프로그램은 사용자와 상호작용을 위해 사용자의 요구(이벤트)를 감지할 수 있어야 한다 • 이벤트의 발생 • 사용자 • 프로그램의 타이머, 카운터의 값이 특정값을 넘었을 경우 등 • 이벤트 지향(event-driven) 프로그램 • 이벤트가 발생하기를 기다리는 무한 루프(infinite loop) 프로그램

  3. 17.2 자바의 이벤트 모델 • 위임형 모델(delegation event model) • GUI의 컴포넌트에서 이벤트가 발생되면 해당되는 리스너(listener)에게 이벤트 처리를 넘겨주는 방식 • 이벤트 처리를 위한 컴포넌트에는 해당 리스너가 등록되어 있어야 하며, 리스너에는 이벤트를 처리할 처리루틴이 포함되어 있어야 한다 GUI 컴포넌트 이벤트 발생 발생된 이벤트에 따라 해당 리스너에 이벤트 전달 리스너 리스너 리스너 컴포넌트에 등록된 리스너들

  4. 17.3 이벤트 관련 컴포넌트 • 이벤트는 대부분 GUI 관련 컴포넌트에서 발생 • 자바는 GUI 관련 컴포넌트들과 연관된 클래스를 java.awt 패키지로 제공(18장)

  5. 17.3 이벤트 관련 컴포넌트 • 이벤트를 발생시키는 컴포넌트들의 클래스 계층 구조 Button Checkbox Canvas Choice Panel Container ScrollPan Dialog FileDialog Component Label Window List Frame Scrollbar TextArea Object TextComponent TextField MenuBar MenuComponent CheckboxMenuItem MenuItem Menu PopupMenu

  6. 17.4 이벤트 종류 • 이벤트를 객체로 취급 • 각 컴포넌트들은 다양한 이벤트를 발생시킨다 • 자바는 다양한 이벤트와 관련된 이벤트 클래스들을 java.awt.event 패키지로 제공 • JVM은 사용자의 조작에 따라 적합한 이벤트를 발생(관련 클래스로부터 이벤트 객체 생성) 시킨다

  7. 17.4 이벤트 종류 • Event 관련 클래스 ActionEvent AdjustmentEvent ContainerEvent FocusEvent KeyEvent InputEvent Object MouseEvent EventObject AWTEvent ComponentEvent PaintEvent WindowEvent ItemEvent TextEvent

  8. 17.4 이벤트 종류 • 이벤트의 종류 ActionEvent 버튼이 눌려지거나, 리스트의 한 항목이 더블 클릭되어 선택되거나, 메뉴의 한 항목이 선택되었을 때 발생 AdjustmentEvent 사용자가 스크롤바를 움직였을 때 발생 ComponentEvent 컴포넌트가 감춰지거나, 감춰진 상태에서 다시 나타날 때, 컴포넌트를 이동하였을 때, 크기를 조정하였을 때 발생 ContainerEvent 컨테이너에 컴포넌트가 추가되거나 제거 되었을 때 발생(18장 참조) FocusEvent 컴포넌트가 키보드 입력을 받아들일 수 있는 초점(focus)을 획득하거나, 초점을 잃었을 때 발생 ItemEvent 체크박스나 리스트의 한 항목이 선택되었을 때, 메뉴의 한 항목이 선택되거나, 선택된 항목이 해제되었을 때 발생 KeyEvent 키보드로부터 입력이 일어났을 때 발생 MouseEvent 마우스의 버튼이 눌려지고 띠어질 때, 움직일 때, 드래그(drag) 할 때, 마우스의 초점이 컴포넌트 영역에 들어가거나 나올 때 발생 TextEvent text area나 text field에서 값이 입력될 때 발생 WindowEvent 윈도우가 활성화(activate)되거나 비활성화 될 때, 아이콘화 될 때, 아이콘으로부터 윈도우로 복구될 때, 윈도우가 open, close, quit 될 때 발생

  9. 17.4 이벤트 종류- 컴포넌트와 이벤트의 관계 이벤트 컴포넌트 Button 0 0 0 0 0 0 Canvas 0 0 0 0 0 Checkbox 0 0 0 0 0 0 Checkbox- 0 MenuItem Choice 0 0 0 0 0 0 Component 0 0 0 0 0 Container 0 0 0 0 0 0 Dialog 0 0 0 0 0 0 0 Frame 0 0 0 0 0 0 0 Label 0 0 0 0 0 List 0 0 0 0 MenuItem 0 0 0 0 Panel 0 0 0 0 0 0 Scrollbar 0 0 0 0 0 0 TextArea 0 0 0 0 0 0 TextField 0 0 0 0 0 0 0 Window 0 0 0 0 0 0 0 Action adjust- compo- conta- focus item key mouse mouse- text window event ment nent iner event event event event motion event event event event event

  10. 17.4 이벤트 종류 - (1) EventObject 클래스와 AWTEvent 클래스 • EventObject 클래스 • 생성자 EventObject(Object src) • 메소드 Object getSource() 이벤트를 발생시킨 객체를 반환 String toString() 이벤트 이름을 문자열로 반환 • AWTEvent 클래스 • 이벤트의 유형을 알아내기 위한 메소드 제공 int getID()

  11. 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 : 이벤트가 발생할 때 같이 사용된 수정키를 의미하는 상수

  12. 17.4 이벤트 종류 - (2) ActionEvent 클래스 • 메소드 String getActionCommand() ActionEvent를 발생시킨 객체의 이름을 반환한다. 예를 들어 버튼이 눌려져서 이벤트가 발생하였다면, 이 메소드는 버튼의 레이블을 문자열로 반환한다. int getModifiers() 이벤트발생시 같이 사용된 수정자키를 (ALT, CTRL, META, SHIFT) 나타내는 상수 값을 반환한다.

  13. 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 : 이벤트와 관련된 데이터 즉 스크롤 바의 이동 값

  14. 17.4 이벤트 종류 - (3) AdjustmentEvent 클래스 • 메소드 Adjustable getAdjustable() 이벤트를 발생시킨 객체를 반환 int getAdjustmentType() 이벤트의 유형을 반환 int getValue() 스크롤의 이동 값을 반환

  15. 17.4 이벤트 종류 - (4) ComponentEvent 클래스 • 컴포넌트가 감춰지거나, 감춰진 상태에서 다시 나타날 때, 이동하였을 때, 크기를 조정하였을 때 발생 • 4가지 유형을 위한 상수 COMPONENT_HIDDEN 컴포넌트가 감추어질 때 COMPONENT_SHOWN 감추어진 컴포넌트가 다시 나타날 때 COMPONENT_MOVED 컴포넌트가 이동하였을 때 COMPONENT_RESIZED 컴포넌트의 크기가 변동되었을 때 • 생성자 ComponentEvent(Component src, int type) src : 이벤트를 생성된 컴포넌트 객체를 의미 type : 이벤트의 타입을 의미 • 메소드 Component getComponent() 이벤트를 발생시킨 컴포넌트를 반환

  16. 17.4 이벤트 종류 - (5) ContainerEvent 클래스 • 컨테이너에 컴포넌트가 추가되거나 제거될 때 발생 • 2가지 유형을 위한 상수 COMPONENT_ADDED 컴포넌트가 컨테이너에 추가될 때 COMPONENT_REMOVED 컴포넌트가 컨테이너에서 제거될 때 • 생성자 ContainerEvent(Component src, int type, Component comp) src : 이벤트를 발생시킨 객체를 의미 type : 이벤트의 유형을 지정하는 상수 comp : 컨테이너에 추가되거나 제거된 컴포넌트를 의미 • 메소드 Container getContainer() 이벤트를 발생시킨 컨테이너를 반환 Component getChild() 컨테이너에 추가되거나 제거된 컴포넌트를 반환

  17. 17.4 이벤트 종류 - (6) FocusEvent 클래스 • 컴포넌트가 마우스의 초점을 획득하거나 잃었을 때 발생 • 2가지 유형을 위한 상수 FOCUS_GAINED 컴포넌트가 마우스의 초점을 얻었을 때 FOCUS_LOST 컴포넌트가 마우스의 초점을 잃었을 때 • 생성자 FocusEvent(Component src, int type) src : 이벤트를 발생시킨 컴포넌트 type :이벤트의 유형

  18. 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키를 사용

  19. 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() 이벤트 발생시 같이 사용된 수정자 키를 반환

  20. 17.4 이벤트 종류 - (8) ItemEvent 클래스 • 체크박스나 리스트 항목이 선택되었을 때, 메뉴의 한 항목이 선택되었을 때, 선택된 항목이 해제될 때 발생 • 이벤트의 유형을 구분하기 위한 2개의 상수 제공 SELECTED 한 항목이 선택되었을 때 DESELECTED 선택된 항목이 해제되었을 때 • 생성자 ItemEvent(ItemSelectable src, int type, Object entry, int state) src : 이벤트를 발생시킨 컴포넌트 type : 이벤트의 유형 entry : 이벤트 발생시 전달하고자 하는 특수한 item 객체를 의미 state : item의 현재 상태를 의미

  21. 17.4 이벤트 종류 - (8) ItemEvent 클래스 • 메소드 Object getItem() 이벤트를 발생시킨 객체를 반환 ItemSelectablegetItemSelectable() 이벤트를 발생시킨 ItemSelectable객체를 반환 리스트나 선택박스 등은 ItemSelectable 인터페이스를 이용하여 구현 int getStateChange() 이벤트의 발생으로 변환된 상태를 상수로 반환

  22. 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 등

  23. 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() 입력된 문자 값을 반환

  24. 17.4 이벤트 종류 - (10) MouseEvent 클래스 • 마우스의 동작에 따라 이벤트 발생 • 이벤트의 유형을 구문하기 위한 상수 제공 MOUSE_CLICKED 마우스 클릭 MOUSE_DRAGGED 마우스 드래그 MOUSE_ENTERED 마우스가 컴포넌트 영역에 진입 MOUSE_EXITED 마우스가 컴포넌트 영역에서 나왔을 때 MOUSE_MOVED 마우스가 이동할 때 MOUSE_PRESSED 마우스가 눌려졌을 때 MOUSE_RELEASED 마우스가 띄어졌을 때

  25. 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) 메뉴에서 일어났음을 의미한다

  26. 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() 마우스가 눌러진 횟수를 반환

  27. 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 객체를 반환

  28. 17.5 이벤트 처리 - 리스너 인터페이스 • 이벤트 처리를 위해 리스너 인터페이스(Listner Interface)를 사용 • 리스너 인터페이스를 사용한 이벤트 처리 순서 1) 처리할 이벤트의 종류를 결정한다 2) 이벤트에 적합한 이벤트 리스너 인터페이스를 사용하여 클래스를 작성 3) 이벤트를 받아들일 각 컴포넌트에 리스너를 등록 4) 리스너 인터페이스에 선언된 메소드를 오버라이딩하여 이벤트 처리 루틴 작성 • java.awt.event 패키지에 이벤트와 관련된 이벤트 리스너 인터페이스 제공

  29. 17.5 이벤트 처리 - 리스너 인터페이스 • 이벤트 클래스와 인터페이스, 인터페이스 선언 메소드 이벤트 클래스 리스너 인터페이스 리스너 인터페이스 메소드 ActionEvent ActionListener actionPerform(ActionEvent) AdjuntmentEvent AdjustmentListener adjustmentValueChanged(AdjustmentEvent) ComponentEvent ComponentListener componentHidden(ComponentEvent) componentMoved(ComponentEvent) componentResized(ComponentEvent) componentShown(ComponentEvent) ContainerEvent ContainerListener componentAdded(ContainerEvent) componentRemoved(ContainerEvent) FocusEvent FocusListerner focusGained(FocusEvent) focusLost(FocusEvent) ItemEvent ItemListener itemStateChanged(ItemEvent) KeyEvent KeyListener keyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent)

  30. 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)

  31. 17.5 이벤트 처리 - 리스너 인터페이스 • 이벤트를 받아들일 컴포넌트에 이벤트 리스너 등록 및 해제 메소드의 형태 void addTypeListener(TypeListener el) void removeTypeListener(TypeListener el) Type : 이벤트의 이름 el : 이벤트 리스너를 의미

  32. 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)

  33. 17.5 이벤트 처리 - 리스너 인터페이스 • 예제

  34. 17.5 이벤트 처리 - 리스너 인터페이스 • 예제

  35. 17.6 이벤트 처리 - 아답터(Adapter) 클래스 • 리스너 인터페이스를 사용하여 이벤트를 처리하는 경우 인터페이스에 선언된 모든 메소드를 오버라이딩하여 구현하여야 한다(불필요한 메소드도 구현) • 자바는 리스너 인터페이스의 기능을 추상 클래스인 아답터 클래스로 제공 ComponentListener ComponentAdapter ContainerListenerContainerAdapter FocusListenerFocusAdapter KeyListenerKeyAdapter MouseListenerMouseAdapter MouseMotionListenerMouseMotionAdapter WindowListenerWindowAdapter

  36. 17.6 이벤트 처리 - 아답터(Adapter) 클래스 • 예제

  37. 17.7 내포(inner)클래스 • 클래스가 다른 클래스 또는 표현식 내부에 포함되는 것을 의미 • 내포된 클래스에서는 자신을 포함하고 있는 클래스의 모든 것을 사용할 수 있다(예제 참조)

  38. 17.7 내포(inner)클래스 • 예제 : MouseInnerDemo2.java 프로그램은 이벤트를 받아들일 애플릿 클래스의 내포된 클래스로서 아답터 클래스를 사용하는 예이다. 내포된 클래스를 이용하면 MouseAdapterDemo2.java 프로그램처럼 아답터 클래스의 생성자를 이용하여 객체의 참조를 넘겨받을 필요가 없다. 내포된 클래스에서는 내포하고 있는 클래스의 메소드를 별도의 참조 없이 바로 사용할 수 있다.

  39. 17.7 내포(inner)클래스 • 예제 : 더 간편한 방법으로 class 예약어를 사용하지 않고, 리스너 등록시 매개변수로 아답터를 바로 등록하는 방법이다. 이러한 방법은 생성된 아답터 클래스가 한 곳에서만 사용될 때 유용하다.

More Related