460 likes | 569 Views
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 + " 입니다 "); } }.
E N D
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 + "입니다"); } }
목차 • section 1 이벤트란? • section 2 자바의 이벤트 모델 • section 3 이벤트 관련 컴포넌트 • section 4 이벤트 종류 • 4-1 EventObject클래스와 AWTEvent클래스 • 4-2 ActionEvent클래스 • 4-3 AdjustmentEvent클래스 • 4-4 ComponentEvent클래스 • 4-5 ContainerEvent클래스
목차 • 4-6 FocusEvent클래스 • 4-7 InputEvent클래스 • 4-8 ItemEvent클래스 • 4-9 WindowEvent클래스 • 4-10 KeyEvent클래스 • 4-11 MouseEvent클래스 • section 5 이벤트 처리 : 리스너 인터페이스(Listener Interface)
1 이벤트란? • 이벤트(event) • 사용자의 입력, 즉 키보드, 마우스 등의 장치로부터 발생하는 모든 사건을 의미 • 이벤트 지향(event-driven) 프로그램 • 프로그램은 무한 루프를 돌면서 사용자의 이벤트가 발생하기를 기다림 • 사용자의 이벤트가 발생하면, 그 이벤트를 처리하고 다시 무한 루프에 빠지게 됨
2 자바의 이벤트 모델 • 위임형 이벤트 모델(delegation event model) • 자바의 이벤트 처리 모델 • 이벤트의 전달 500 page
3 이벤트 관련 컴포넌트 • 자바에서의 대부분의 이벤트는 GUI 관련 컴포넌트에서 발생 • 주요 이벤트를 발생시키는 컴포넌트들의 클래스 계층 구조 501 page
4 이벤트 종류 • 자바에서는 이벤트를 객체로 처리 • 각 컴포넌트들은 다양한 종류의 이벤트를 발생 • 이벤트 관련 클래스 • 자바에서는 이벤트와 연관된 클래스들을 java.awt.event패키지로 제공 502 page
4 이벤트 종류 • 컴포넌트별 사용자의 작동과 관련 이벤트
4 이벤트 종류 4-1 EventObject클래스와 AWTEvent클래스 • EventObject클래스 • 대부분의 주요 이벤트 클래스들이 EventObject클래스로부터 상속 • EventObject클래스 생성자 • EventObject클래스의 주요 메소드 EventObject(Object src) 형식
4 이벤트 종류 4-1 EventObject클래스와 AWTEvent클래스 • AWTEvent클래스 • EventObject클래스로부터 상속된 클래스 • AWTEvent클래스의 메소드
4 이벤트 종류 4-2 ActionEvent클래스 • Action 이벤트 • 버튼이 눌려졌거나, 리스트 항목이 선택되었을 때 ,메뉴의 한 항목이 선택되었을 때 발생 • 가장 많이 사용되는 이벤트 클래스 • ActionEvent클래스 생성자 EventObject(Object src) 형식
4 이벤트 종류 4-2 ActionEvent클래스 • 이벤트가 발생되었을 때 같이 사용된 수정자(modifier)키를 구분하기 위한 4개의 상수를 제공 • ALT_MASK : 수정자 키로 ALT 키를 사용 • CTRL_MASK : 수정자 키로 CTRL 키를 사용 • META_MASK : 수정자 키로 META 키를 사용 • SHIFT_MASK : 수정자 키로 SHIFT 키를 사용 • ActionEvent클래스의 주요 메소드
4 이벤트 종류 4-3 AdjustmentEvent클래스 • Adjustment 이벤트 • 스크롤 바의 위치가 이동되면 발생 • 5가지 유형 • BLOCK_DECREMENT : 스크롤 바의 값을 감소시키는 경우 • BLOCK_INCREMENT : 스크롤 바의 값을 증가시키는 경우 • TRACK : 스크롤 바를 드래그(drag) 하는 경우 • UNIT_INCREMENT : 스크롤 바의 값을 상향 버튼을 사용하여 증가시키는 경우 • UNIT_DECREMENT : 스크롤 바의 값을 하향 버튼을 사용하여 감소시키는 경우
4 이벤트 종류 4-3 AdjustmentEvent클래스 • Adjustment 클래스 생성자 • AdjustmentEvent클래스의 주요 메소드 AdjustmentEvent(Adjustable src, int id, intadjustment_type, int data) 형식
4 이벤트 종류 4-4 ComponentEvent클래스 • Component 이벤트 • 컴포넌트가 감춰지거나, 감춰진 상태에서 다시 나타날 때, 이동하였을 때, 크기를 조정하였을 때 발생 • 5개의 하위 클래스 • COMPONENT_HIDDEN : 컴포넌트가 감추어질 때 • COMPONENT_SHOWN : 감추어진 컴포넌트가 다시 나타날 때 • COMPONENT_MOVED : 컴포넌트가 이동하였을 때 • COMPONENT_RESIZED : 컴포넌트의 크기가 변동되었을 때
4 이벤트 종류 4-4 ComponentEvent클래스 • ComponentEvent클래스 생성자 • ComponentEvent클래스의 메소드 ComponentEvent(Component src, int type) 형식
4 이벤트 종류 4-5 ContainerEvent클래스 • Container 이벤트 • Container에 컴포넌트 객체가 추가되거나 제거될 때 발생 • 이벤트의 유형을 구분하기 위해 2개의 상수를 제공 • COMPONENT_ADDED : 컴포넌트가 컨테이너에 추가될 때 • COMPONENT_REMOVED : 컴포넌트가 컨테이너에서 제거될 때
4 이벤트 종류 4-5 ContainerEvent클래스 • ContainerEvent클래스 생성자 • ContainerEvent클래스의 주요 메소드 ContainerEvent(Component src, int type, Component comp) 형식
4 이벤트 종류 4-6 FocusEvent클래스 • Focus 이벤트 • 컴포넌트가 마우스의 초점(focus)을 획득하거나 초점을 잃었을 때 발생 • FocusEvent클래스 생성자 • 이벤트의 유형을 구분하기 위해 2개의 상수를 사용 • FOCUS_GAINED : 컴포넌트가 마우스의 초점을 얻었을 때 • FOCUS_LOST : 컴포넌트가 마우스의 초점을 잃었을 때 FocusEvent(Component src, int type) 형식
4 이벤트 종류 4-7 InputEvent클래스 • InputEvent클래스 • 추상 클래스로 • Component 클래스로부터 상속된 클래스 • 수정키를 구분하기 위하여 7개의 상수를 가짐 • ALT_MASK : 수정자 키로 ALT 키를 사용 • BUTTON1_MASK : 첫 번째 마우스의 버튼 사용(보통 마우스는 3개의 버튼 사용) • BUTTON2_MASK : 두 번째 마우스 버튼 사용 • BUTTON3_MASK : 세 번째 마우스 버튼 사용 • CTRL_MASK : 수정자 키로 CTRL 키를 사용 • META_MASK : 수정자 키로 META 키를 사용 • SHIFT_MASK : 수정자 키로 SHIFT 키를 사용
4 이벤트 종류 4-7 InputEvent클래스 • InputEvent클래스의 주요 메소드
4 이벤트 종류 4-8 ItemEvent클래스 • ItemEvent • 체크박스나 리스트 항목이 선택되었을 때 또는 메뉴의 한 항목이 선택되었거나 선택된 항목이 해제될 때 발생 • 이벤트의 유형을 구분하기 위한 두 개의 상수를 제공 • SELECTED : 한 항목이 선택되었을 때 • DESELECTED : 선택된 항목이 해제되었을 때
4 이벤트 종류 4-8 ItemEvent클래스 • ItemEvent클래스 생성자 • ItemEvent클래스의 주요 메소드 ItemEvent(ItemSelectablesrc, int type, Object entry, int state) 형식
4 이벤트 종류 4-9 WindowEvent클래스 • WindowEvent • 윈도와 관련되어, 윈도가 활성화되거나 아이콘화될 때, 닫혀질 때 등에 발생 • WindowEvent클래스는 ComponentEvent클래스의 하위 클래스 • 이벤트의 유형을 구분하기 위한 다섯개의 상수를 사용 • WINDOW_ACTIVATED : 윈도가 활성화될 때 • WINDOW_CLOSED : 윈도가 닫힐 때 • WINDOW_CLOSING : 사용자의 요청으로 윈도가 닫힐 때 • WINDOW_ICONIFIED : 윈도가 아이콘화 될 때 • WINDOW_OPENED : 윈도가 생성될 때
4 이벤트 종류 4-9 WindowEvent클래스 • WindowEvent클래스 생성자 • ComponentEvent클래스의 메소드 WindowEvent(Window src, int type) 형식
4 이벤트 종류 4-10 KeyEvent클래스 • KeyEvent • 키보드로부터 입력이 일어날 때 발생 • 이벤트의 유형을 구분하기 위해 3개의 상수를 사용 • KEY_PRESSED : 키가 눌러졌을 때 • KEY_RELEASED : 키가 띄어졌을 때 • KEY_TYPED : 키에 의해 문자가 생성되었을 때
4 이벤트 종류 4-10 KeyEvent클래스 • KeyEvent클래스 생성자 • ComponentEvent클래스의 메소드 KeyEvent(Component src, int type, long when, int modifiers, int code) KeyEvent(Component src, int type, long when, int modifiers, int code, char ch) 형식
4 이벤트 종류 4-11 MouseEvent클래스 • MouseEvent • 매우 다양한 형태로 발생 • 사용자가 마우스를 이용하여 작동하는 대부분의 행동에 이벤트가 발생 • 이벤트의 유형을 구분하기 위해 7개의 상수를 사용 • MOUSE_CLICKED : 마우스 클릭 • MOUSE_DRAGGED : 마우스 드래그 • MOUSE_ENTERED : 마우스가 컴포넌트 영역에 진입 • MOUSE_EXITED : 마우스가 컴포넌트 영역에서 나왔을 때 • MOUSE_MOVED : 마우스가 이동할 때 • MOUSE_PRESSED : 마우스가 눌러졌을 때 • MOUSE_RELEASED : 마우스가 띄어졌을 때
4 이벤트 종류 4-11 MouseEvent클래스 • MouseEvent클래스 생성자 • ComponentEvent클래스의 메소드 MouseEvent(Component src, int type, long when, int modifiers, int x, int y, int clicks, booleantriggersPopup) 형식
5 이벤트 처리 : 리스너 인터페이스(Listener Interface) • 이벤트 리스너 인터페이스를 이용하여 이벤트를 처리하기 위한 순서 • 처리할 이벤트의 종류를 결정한다. • 이벤트에 적합한 이벤트 리스너 인터페이스를 사용하여 클래스를 작성 • 이벤트를 받아들일 각 컴포넌트에 리스너를 등록 • 리스너 인터페이스에 선언된 메소드를오버라이딩하여 이벤트 처리 루틴 작성 • ava.awt.event패키지 • 각각의 이벤트 클래스와 연관된 이벤트 리스너 인터페이스를 제공
5 이벤트 처리 : 리스너 인터페이스(Listener Interface) • 이벤트 클래스와 인터페이스, 인터페이스에 선언된 메소드
5 이벤트 처리 : 리스너 인터페이스(Listener Interface) • 이벤트 클래스와 인터페이스, 인터페이스에 선언된 메소드
5 이벤트 처리 : 리스너 인터페이스(Listener Interface) • Component 클래스는 이벤트 리스너를 등록하고 해제하는 메소드를 제공 • Component 클래스에서 제공되는 리스너 등록 및 해제 메소드
5 이벤트 처리 : 리스너 인터페이스(Listener Interface) • Component 클래스에서 제공되는 리스너 등록 및 해제 메소드
5 이벤트 처리 : 리스너 인터페이스(Listener Interface) • 실습문제 이벤트 처리를 위해 이벤트 패키지를 포함 이벤트 처리를 위해 관련 인터페이스를 포함 컴포넌트(this)에 이벤트 리스너 등록 마우스 클릭 시 처리 루틴 마우스가 들어왔을 때 처리 루틴 마우스가 빠져나갔을 때 처리 루틴 마우스가 눌러졌을 때 처리 루틴 마우스가 띠어졌을 때 처리 루틴
5 이벤트 처리 : 리스너 인터페이스(Listener Interface) • 실습문제
5 이벤트 처리 : 리스너 인터페이스(Listener Interface) • 프로그램 설명 • 03 : 이벤트를 처리하기 위해서는 java.awt.event.* 패키지를 사용해야 한다. • 04 : 컴포넌트에서 이벤트를 처리하기 위해서는 클래스를 작성할 때 이벤트와 연관된 이벤트 리스너를 포함하여 작성하여야 한다. 이 프로그램의 경우에는 패널에서 이벤트를 처리하기 위해 패널을 만드는 클래스에서 이벤트 리스너를 포함하였다. 사용자는 응용 프로그램에서 처리할 이벤트의 형태에 따라 적합한 이벤트 리스너를 선택해야 한다. • 06 : 이벤트 리스너를 처리할 컴포넌트에 등록하여야 한다. 처리할 컴포넌트를 this로 지정하였다. this는 현재의 객체를 의미한다. 즉 현재의 객체(컴포넌트 객체)에 이벤트 리스너를 등록한다. 당연히 클래스 작성 시 포함한 이벤트 리스너를 등록하여야 한다. • 08~22 : 실질적인 이벤트 처리 루틴을 작성한다. 이 루틴은 클래스 작성 시 포함한 리스너 인터페이스에 선언된 메소드이다. 이 메소드를 오버라이딩하여 이벤트를 처리하여야 한다.
5 이벤트 처리 : 리스너 인터페이스(Listener Interface)
5 이벤트 처리 : 리스너 인터페이스(Listener Interface) • 실습예제 글자를 나타낼 좌표 설정 이벤트 처리를 위해 관련 인터페이스를 포함 묵시적으로 대문자 ‘A’를 설정 리스너를 등록 키가 눌러졌을 때 문자 값을 구한다 repaint() 메소드는paintComponent() 메소드를 호출한다 글자를 패널에 출력하는 메소드 글자를 위치에 그린다
5 이벤트 처리 : 리스너 인터페이스(Listener Interface) • 실습예제 패널이 키보드 입력을 받아들이도록 설정
5 이벤트 처리 : 리스너 인터페이스(Listener Interface) • 프로그램 설명 • 04 : 컴포넌트에서 이벤트를 처리하기 위해서는 클래스를 작성할 때 이벤트와 연관된 이벤트 리스너를 포함하여 작성하여야 한다. 이 프로그램의 경우에는 패널에서 키보드의 입력을 처리하기 위해 KeyListener를 포함하였다. • 05~06 : 패널의 글자를 나타낼 위치를 설정하였다. • 07 : 패널에 묵시적으로 ‘A’를 나타내기 위해 설정하였다. • 09 : 이벤트 리스너를 처리할 컴포넌트에 등록하여야 한다. 처리할 컴포넌트를 this로 지정하였다. this는 현재의 객체를 의미한다. • 14 : 키가 눌러졌을 때 눌러진 키 값을 구한다. • 15 : repaint() 메소드는 자동으로 현재의 패널을 지우고 paintComponent() 메소드를 호출한다. repaint() 메소드는Component 클래스에 선언된 메소드이다. • 17~20 : 글자를 패널에 그리는 메소드이다. 폰트를 설정하고, 문자열을 그리는 메소드이다. • 27 : 패널이 키보드를 입력받을 수 있도록 활성화시키는 메소드이다.
5 이벤트 처리 : 리스너 인터페이스(Listener Interface) • 실행결과 • 아래와 같은 창이 뜨게 되고 키보드에서 대문자 ‘F’를 입력한 경우이다.
학습정리 • 이벤트란? • 이벤트(event)란 사용자의 입력, 즉 키보드, 마우스 등의 장치로부터 발생하는 모든 사건을 의미한다. • 응용 프로그램은 컴포넌트로부터 발생하는 모든 사용자의 작동(마우스 클릭, 키보드 입력, 마우스 움직임 등), 즉 이벤트를 처리할 수 있어야 한다. • 자바의 이벤트 모델 및 이벤트 관련 컴포넌트 • 자바의 이벤트 처리 모델은 위임형 이벤트 모델(delegation event model)이다. • 위임형 모델은 GUI의 한 컴포넌트에서 이벤트가 발생되면, 하나 또는 하나 이상의 이벤트 리스너(listener)에 이벤트 처리를 넘겨주는 방식이다. • 자바는 GUI 관련 컴포넌트(AWT, Swing)에서 대부분의 이벤트가 발생한다.
학습정리 • 이벤트 종류 • 자바에서는 이벤트를 객체로 처리한다. 객체로 처리한다는 의미는 클래스를 가진다는 의미이다. 자바에서는 이벤트와 연관된 클래스들을 java.awt.event패키지로 제공하고 있다. • 각 컴포넌트들은 다양한 종류의 이벤트를 발생시킨다. • JVM은 각 컴포넌트에 이벤트가 발생하면, 관련된 이벤트 클래스로부터 객체를 생성해서 해당 처리 루틴에 넘겨주게 된다. • 이벤트 처리 : 이벤트 리스너 • 사용자는 이벤트를 처리할 클래스를 작성할 때 적합한 이벤트 리스너를 포함하여 작성하여야 한다. • 이벤트 리스너 인터페이스를 이용하여 이벤트를 처리하기 위해 다음과 같은 순서로 프로그램을 작성하여야 한다. • 처리할 이벤트의 종류를 결정한다. • 이벤트에 적합한 이벤트 리스너 인터페이스를 사용하여 클래스를 작성한다. • 이벤트를 받아들일 각 컴포넌트에 리스너를 등록한다. • 리스너 인터페이스에 선언된 메소드를오버라이딩하여 이벤트 처리 루틴을 작성한다.
15장. 이벤트 처리 수고하셨습니다. 질문 있습니까?