제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 ·...

69
프로그래머를 프로그래머를 위한 위한 Java 2 Java 2 7 7 이벤트 이벤트 프로그래밍 프로그래밍 참고: 구 버전 (2005년 이전)7장 이벤트 프로그래밍 7.2 : AWT event 7.3 : Swing event 신 버전 (2006년 이후)7.3 : 이벤트 부분

Transcript of 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 ·...

Page 1: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

프로그래머를프로그래머를 위한위한 Java 2Java 2제제77장장 이벤트이벤트 프로그래밍프로그래밍

참고: 구버전 (2005년이전)의7장이벤트프로그래밍

7.2 : AWT event7.3 : Swing event

신버전 (2006년이후)의7.3 : 이벤트부분

Page 2: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 2이벤트이벤트 ((신신 7.3)7.3)

이벤트

사용자의 액션 혹은 시스템의 어떤 사건

이벤트 드리븐 프로그래밍

이벤트 분류

Low level event – 세부적인 이벤트

High level event – 논리적인 이벤트

Page 3: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 3이벤트이벤트 프로그램프로그램 작성작성 ((신신 7.3)7.3)

이벤트 프로그램 작성 요령

GUI 컴포넌트(예: JButton)를 생성한다.이벤트 리스너 인터페이스(예: ActionListener)를 구현하는 클래스를

작성한다. GUI 컴포넌트에 이벤트 리스너를 등록(예: addActionListener())한다.

이벤트 관련 패키지

java.awt.eventjavax.swing.event

Page 4: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 47. 7. 이벤트이벤트 프로그래밍프로그래밍

이벤트-드리븐 (event-driven) 프로그래밍

마우스 버튼 클릭, 더블 클릭, 마우스 이동 등의 모든 사용자 액션에 대해

응답하는 형태로 작동하도록 하는 프로그래밍

윈도우 환경에서는 대부분의 응용프로그램이 이벤트-드리븐 프로그래밍

방식으로 작성된다.

일반 프로그램 이벤트-드리븐 프로그램

Page 5: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 57.1 AWT 7.1 AWT 이벤트이벤트

고수준 이벤트

여러 개의 작은 이벤트들로 이루어져 있는 의미 있는 것

예: “마우스를 클릭한다”

저수준 이벤트

작은 작업들로 세밀하게 표현되는 것

예: 마우스 클릭 --> “마우스를 이동한다.”, ”마우스를 누른다.”, ”마우스를

띤다.”

버튼에서 클릭에 따른 이벤트 처리과정

1. 버튼 객체를 생성한다.

Button ok = new Button("OK");

2. 버튼을 클릭하는 경우에 수행할 작업을 버튼에 등록한다. 버튼에

등록할 때 addActionListener()라는 메소드를 이용한다.

ok.addActionListener(...)

Page 6: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 67.1 AWT 7.1 AWT 이벤트이벤트

예제) 버튼에서 액션 이벤트를 처리

ActionListener 인터페이스를 임플리멘츠해야 한다.ActionListener 인터페이스를 임플리멘츠하는 클래스는

actionPerformed() 메소드를 만들어야 한다.버튼에서 클릭이 발생하면 아래 그림과 같이 등록된 이벤트 핸들러 클래스의

actionPerformed() 메소드가 호출되어 실행

Page 7: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 77.1 AWT 7.1 AWT 이벤트이벤트

버튼에 수행내용 등록

addActionListener(..) 메소드 이용.이 메소드의 매개변수는 버튼 클릭에 의해 작업할 내용을 갖는 객체임.버튼을 클릭하면 actionPerformed(ActionEvent )가 수행되도록 약속되어

있음.객체에 actionPerfomed(ActionEvent) 메소드가 있음을 보장하기 위해

ActionListener인터페이스를 임프리멘츠함.

...........

.........

O K

implements ActionListener

public void actionPerformed (ActionEvent e) { ...}

Button ok = new Button("OK");

ok.addActionListener( );

class등록

Page 8: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 8이벤트이벤트 프로그램프로그램 작성작성

예제: ButtonEvent.java (신 7.3.1)

2 import java.awt.event.*;

5 public class ButtonEvent extends JFrame implements ActionListener {

11 ok = new JButton("OK");

12 ok.addActionListener(this);

20 public void actionPerformed(ActionEvent e) {

21 Object o = e.getSource();

22 if(o == ok) {

23 System.out.println("OK");

Page 9: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 9이벤트이벤트 클래스들클래스들

이벤트 클래스 상속 관계 (신 7.3.2)

Page 10: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 10이벤트이벤트 클래스들클래스들

EventObject이벤트 클래스의 가장 상위 클래스

ActionEvent버튼 클릭, 텍스트 필드에서 엔터 입력, 리스트에서 더블 클릭, 메뉴아이템

선택

ItemEvent체크박스, 라디오, 리스트, 콤보박스

MouseEvent, MouseWheelEvent마우스 작동

KeyEvent키보드 입력

Page 11: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 11이벤트이벤트 처리처리

이벤트 처리 절차

Page 12: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 127.1 AWT 7.1 AWT 이벤트이벤트

AWT 컴포넌트에서 발생할 수 있는 이벤트들

발생할 수 있는 이벤트AWT컴포넌트 action adjus

tmentcomponent

container

focus

item

key

mouse

mousemotio

n

text window

Button

Canvas

Checkbox

CheckboxMenuItem

Choice

ComponentContainer

Dialog

Frame

Label

X X X X X XX X X X XX X X X X X

X

X X X X X XX X X X XX X X X X XX X X X X X XX X X X X X XX X X X X

Page 13: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 137.1 AWT 7.1 AWT 이벤트이벤트

발생할 수 있는 이벤트AWT

컴포넌트 action

adjustment

component

container

focus

item

key mouse

mousemotion

text window

List

MenuItem

Panel

Scrollbar

ScrollPane

TextArea

TextComponent

TextField

Window

X X X X X X X

X

X X X X X X

X X X X X X

X X X X X X

X X X X X X

X X X X X X

X X X X X X X

X X X X X X X

Page 14: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 147.1 AWT 7.1 AWT 이벤트이벤트

각 이벤트에 따라 등록해야 하는 인터페이스들이 있다.인터페이스 이름은 “이벤트 이름+Listener”의 형태이다.

인테페이스에 선언된 메소드의 목록

Listener Interface Adapter Class Methods

ActionListener none actionPerformed(ActionEvent)

AdjustmentListener none adjustmentValueChanged(AdjustmentEvent)ComponentListener ComponentAdapt

ercomponentHidden(ComponentEvent)

componentMoved(ComponentEvent)

componentResized(ComponentEvent)

componentShown(ComponentEvent)

ContainerListener ContainerAdapter componentAdded(ContainerEvent)

componentRemoved(ContainerEvent)

Page 15: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 157.1 AWT 7.1 AWT 이벤트이벤트

Listener Interface Adapter Class Methods

FocusListener FocusAdapter focusGained(FocusEvent)

focusLost(FocusEvent)

ItemListener none itemStateChanged(ItemEvent)

KeyListener KeyAdapter keyPressed(KeyEvent)

keyReleased(KeyEvent)

keyTyped(KeyEvent)

MouseListener MouseAdapter mouseClicked(MouseEvent)

mouseEntered(MouseEvent)

mouseExited(MouseEvent)

mousePressed(MouseEvent)

mouseReleased(MouseEvent)

MouseMotionListener MouseMotionAdapter mouseDragged(MouseEvent)

mouseMoved(MouseEvent)

Page 16: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 167.1 AWT 7.1 AWT 이벤트이벤트

Listener Interface Adapter Class Methods

TextListener none textValueChanged(TextEvent)

windowActivated(WindowEvent)

windowClosed(WindowEvent)

windowClosing(WindowEvent)

windowDeactivated(WindowEvent)

windowDeiconified(WindowEvent)

windowIconified(WindowEvent)

windowOpened(WindowEvent)

WindowListener WindowAdapter

Page 17: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 177.2 7.2 이벤트이벤트 처리처리

7.2.1 기본적인 클래스들

1. EventObject 클래스

java.util 패키지의 EventObject는 모든 이벤트 클래스들에서 가장

상위에 있는 클래스이다. 따라서 모든 이벤트 클래스들은 직접 혹은간접적으로 이 클래스로부터 상속받고 있다.

생성자와 메소드

EventObject(Object source) - EventObject 타입의 객체를 생성.Object getSource() - 이벤트가 발생한 객체를 리턴.String toString() - 이벤트를 문자열로 리턴.

Page 18: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 187.2 7.2 이벤트이벤트 처리처리

2. AWTEvent 클래스AWT이벤트를 위한 클래스 중에서 가장 상위 클래스, EventObject 로부터상속받음.AWTEvent는 AWT 이벤트를 표현하기 위해 id 속성을 가진다

생성자와 메소드

AWTEvent(Event event) - JDK1.0에서 사용되던 이벤트(Event) 타입의 객체를 이용해서AWTEvent를 생성.AWTEvent(Object source, int id) - 이벤트가 발생한 곳 (source)와 이벤트 타입 (id)를 이용해서AWTEvent를 생성.int getID() - 이벤트 타입을 리턴.String paramString() - 이벤트의 상태를 문자열로 리턴.

Page 19: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 197.2 7.2 이벤트이벤트 처리처리

7.2.2 ActionEvent컴포넌트에서 정의한 고수준의 이벤트가 발생한 것을 표현하기 위한

클래스

액션 이벤트가 발생하는 경우

버튼을 클릭할 때

텍스트필드에서 엔터를 칠 때

리스트에서 더블 클릭할 때

메뉴 아이템을 선택할 때(클릭할 때)

ActionEvent 생성자

ActionEvent(Object source, int id, String command)- ActionEvnet를 생성한다.ActionEvent(Object source, int id, String command, int modifiers) - 모디파이어 키가 눌려진 ActionEvent를 생성한다.

Page 20: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 207.2 7.2 이벤트이벤트 처리처리

ActionEvent는 다음과 같은 메소드들을 가진다.String getActionCommand() - 액션과 관련된 명령어 문자열을

리턴한다.int getModifiers() - 액션이 발생할 때 눌려진 모디파이어 키를

리턴한다. 모디파이어 키는 쉬프트, 알트, 컨트롤 키를 의미한다.

1. 버튼

버튼을 마우스로 클릭하는 경우에 ActionEvent가 발생. 버튼의 액션 이벤트를 처리하기 위해서는 버튼을 생성한 후에

addActionListener() 메소드를 호출해서 이벤트 처리 루틴을

등록해주어야함. ActionListener 인터페이스에는 actionPerformed()가 선언되어 있으므로

임플리멘츠하는 클래스는 actionPerformed()를 정의해주어야함 .

Page 21: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 217.2 7.2 이벤트이벤트 처리처리

예제: ButtonEvent.java1 import java.awt.*;2 import java.awt.event.*;34 public class ButtonEvent extends Frame implements ActionListener {5 Button exit, print;67 public ButtonEvent() {8 super("버튼의 이벤트 테스트");9 print = new Button("Hello");

10 print.addActionListener(this);1112 exit = new Button("Exit");13 exit.addActionListener(this);1415 add("North", print);16 add("South", exit);1718 setSize(300, 200);

Page 22: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 227.2 7.2 이벤트이벤트 처리처리

19 setVisible(true);20 }2122 public void actionPerformed(ActionEvent e) {23 if(e.getSource() == print) {24 System.out.println("Hello~~");25 }else if(e.getSource() == exit) {26 setVisible(false);27 dispose();28 System.exit(0);29 }30 }3132 public static void main(String args[]) {33 ButtonEvent be = new ButtonEvent();34 }35 }

Page 23: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 237.2 7.2 이벤트이벤트 처리처리

`

2. 텍스트 필드

텍스트 필드에서 엔터 키를 입력하는 경우에 ActionEvent가 발생한다.

예제: TextFieldEvent.java1 import java.awt.*;2 import java.awt.event.*;34 public class TextFieldEvent extends Frame implements ActionListener {5 TextField one, two;6 Button exit;78 public TextFieldEvent() {9 super("텍스트필드 이벤트");

10 one = new TextField("How are you ?");11 one.addActionListener(this);12 two = new TextField("Hello");13 two.addActionListener(this);14 exit = new Button("Exit");15 exit.addActionListener(this);

Page 24: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 247.2 7.2 이벤트이벤트 처리처리

17 add("North", one);18 add("South", two);19 add("East", exit);

…………………..24 public void actionPerformed(ActionEvent e) {25 if(e.getSource() == one) {26 String msg = two.getText();27 two.setText(one.getText());28 one.setText(msg);29 }else if(e.getSource() == two) {30 System.out.println(two.getText());31 String msg = two.getText();32 two.setText(one.getText());33 one.setText(msg);34 }else if(e.getSource() == exit) {35 setVisible(false);36 dispose();37 System.exit(0);

………………

Page 25: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 257.2 7.2 이벤트이벤트 처리처리

7.2.3 ItemEventItemEvent는 체크박스, 라디오버튼, 선택, 리스트에서 아이템이

선택되거나 선택이 해제되는 경우에 발생하는 고수준 이벤트이다.

ItemEvent의 멤버 필드

static int DESELECTED - 선택이 해제된 것

static int ITEM_STATE_CHANGED - 아이템의 상태가 변경됨

static int SELECTED - 아이템이 선택된 것

ItemEvent의 생성자

ItemEvent(ItemSelectable source, int id, Object item, int stateChange) - ItemEvnet를 생성한다

Page 26: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 267.2 7.2 이벤트이벤트 처리처리

ItemEvent의 메소드

Object getItem() - 이벤트에 의해 영향받는 아이템을 리턴한다.ItemSelectable getItemSelectable() - 이벤트의 발생지를 리턴한다.int getStateChange() - 변경된 상태를 리턴한다.

ItemEvent를 처리하기 위해서는 ItemListener 인터페이스를

임플리멘츠한 이벤트 핸들러를 addItemListener() 메소드를 이용해서

등록해야 한다.

ItemListener 인터페이스는 itemStateChanged() 메소드를 가지고 있다.void itemStateChanged(ItemEvent e) - 아이템이 선택되거나 선택이 해제될 때 자동적으로 호출된다.

Page 27: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 277.2 7.2 이벤트이벤트 처리처리

1. 체크 박스

체크박스를 선택하거나 선택을 해제할 때 ItemEvent가 발생한다.

예제: CheckEvent.java…………………..

4 public class CheckEvent extends Frame5 implements ItemListener, ActionListener {

…………….11 public CheckEvent() {

…………….15 top.add(one = new Checkbox("One"));16 one.addItemListener(this);17 top.add(two = new Checkbox("Two"));18 two.addItemListener(this);1920 Panel bottom = new Panel();21 cbg = new CheckboxGroup();22 bottom.add(male = new Checkbox("남자", cbg, true));23 male.addItemListener(this);

Page 28: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 287.2 7.2 이벤트이벤트 처리처리

24 bottom.add(female = new Checkbox("여자", cbg, false));25 female.addItemListener(this);

…………………..44 public void itemStateChanged(ItemEvent e) {45 Object o = e.getSource();4647 if(o == one) {48 System.out.println(e.getItem());49 }else if(o == two) {50 if(e.getStateChange() == ItemEvent.SELECTED) {51 System.out.println("two is selected");52 } else {53 System.out.println("two is deselected");54 }55 }else if(o == male) {56 System.out.println("남자 - selected");57 }else if(o == female) {58 System.out.println("여자 - selected");59 }60 }

…………………..

Page 29: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 297.2 7.2 이벤트이벤트 처리처리

2. 선택 버튼(Choice)

선택버튼의 아이템을 선택하는 경우에 ItemEvent가 발생한다.

3. 라디오 버튼(Radio)

라디오 버튼은 체크박스의 특수한 형태이다. 라디오 버튼을

선택하는 경우에 ItemEvent가 발생한다.

4. 리스트(List)

리스트의 아이템을 더블 클릭하는 경우에는 ActionEvent가, 한번 클릭하는 경우에는 ItemEvent가 발생한다.

Page 30: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 307.2 7.2 이벤트이벤트 처리처리

예제: ChoiceListEvent.java………………

4 public class ChoiceListEvent extends Frame5 implements ActionListener, ItemListener {

………………11 public ChoiceListEvent() {12 super("Choice와 List 이벤트");1314 fruits = new Choice();15 fruits.addItemListener(this);16 fruits.add("Apple");17 fruits.add("Orange");18 fruits.add("Banna");1920 color = new List(3, true);21 color.addItemListener(this);22 color.addActionListener(this);23 color.add("blue");24 color.add("red");

……………

Page 31: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 317.2 7.2 이벤트이벤트 처리처리

51 public void itemStateChangeditemStateChanged((ItemEventItemEvent e)e) {52 Object o = e.getSource();53 if(o == fruits) {54 System.out.println(fruits.getSelectedItem());55 } else if(o == color) {56 Object si[] = color.getSelectedItems();57 System.out.println("현재 선택된 아이템들");58 for(int i=0; i < si.length; i++) {59 System.out.print(si[i] + " ");60 }61 System.out.println("\n----------------------");62 System.out.print("이벤트가 발생한 아이템: ");63 int index = ((Integer)e.getItem()).intValue();64 System.out.println(color.getItem(index));65 System.out.println("\n---------------------\n");66 }67 }

………………..

Page 32: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 327.2 7.2 이벤트이벤트 처리처리

7.2.4 WindowEvent윈도우의 상태가 변경될 때 발생하는 저수준의 이벤트.윈도우가 열리는 경우, 닫히는 경우, 활성화되는 경우, 비활상화되는 경우, 아이콘이 되는 경우, 아이콘에서 원도우로 다시 변경되는 경우에 발생.윈도우, 다이얼로그, 프레임에서 발생할 수 있다.

WindowEvnet의 생성자와 메소드

WindowEvent(Window source, int id) - WindowEvent를 생성한다.Window getWindow() - 이벤트가 발생한 윈도우를 리턴한다.

WindowListener 인터페이스의 7개 메소드를 모두 정의할 필요가

없을 경우, WindowAdapter클래스를 상속하는 클래스를 정의하고 필요한

메소드만 오버라이드하여 사용하는 것이 가능.

Page 33: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 337.2 7.2 이벤트이벤트 처리처리

예제: FrameEvent.java……………..

4 public class FrameEvent extends Frame {5 Label msg;67 public FrameEvent() {……………..

12 addWindowListener(new WindowHandler());13 setSize(300, 200);14 setVisible(true);15 }1617 public class WindowHandler extends WindowAdapter {18 public void windowClosing(WindowEvent e) {19 Window w = e.getWindow();20 w.setVisible(false);21 w.dispose();22 System.exit(0);23 }

………………..

Page 34: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 347.2 7.2 이벤트이벤트 처리처리

7.2.5 MouseEvent마우스 관련 이벤트는 마우스 클릭과 마우스 이동에 관한 2가지

형태로 분류할 수 있다.마우스 클릭 관련 이벤트는 MouseListener 인터페이스에서

관리

마우스 이동 관련 이벤트는 MouseMotion Listener 인터페이스에서 관리

각각 MouseAdapter와 MouseMotionAdapter 클래스들을 제공

예제: DrawRect.java

6 int startX, startY, w, h;78 public void init() {9 addMouseListener(new MouseEventHandler());

10 addMouseMotionListener(new MouseMotionHandler());

Page 35: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 357.2 7.2 이벤트이벤트 처리처리

……21 public class MouseMotionHandler extendsextends MouseMotionAdapterMouseMotionAdapter {22 public void mouseDragged(MouseEvent e) {23 w = Math.abs(startX - e.getX());24 h = Math.abs(startY - e.getY());25 repaint();……29 public class MouseEventHandler extendsextends MouseAdapterMouseAdapter {30 public void mousePressed(MouseEvent e) {31 startX = e.getX();32 startY = e.getY();33 }3435 public void mouseReleased(MouseEvent e) {36 w = Math.abs(startX - e.getX());37 h = Math.abs(startY - e.getY());38 repaint();……

Page 36: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 367.2 7.2 이벤트이벤트 처리처리

7.2.6 KeyEvent1. InputEvent

InputEvent는 KeyEvent와 MouseEvent의 부모 클래스로서, 모든

컴포넌트의 입력을 위한 이벤트의 가장 상위 클래스이다.

InputEvent는 이벤트가 발생된 컴포넌트에서 기본적으로 처리되기 전에

리스너로 먼저 전달된다. 따라서, 필요한 경우에는 리스너(listener)

부분에서 먼저 이벤트를 처리하고, 이벤트가 발생한 컴포넌트가 디폴트

작업하지 못하도록 할 수 있다.

InputEvent의 메소드

void consume() - 이벤트가 발생한 컴포넌트에서 디폴트로

작업하지 안도록 이벤트를 소비한다.

int getModifiers() - 모디파이어 플래그값을 리턴한다.

Page 37: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 377.2 7.2 이벤트이벤트 처리처리

long getWhen() - 이벤트가 발생한 시간의 타임 스탬프 값을

리턴한다.

boolean isAltDown() - ALT 키가 눌려졌는지 알아본다.

boolean isConsumed() - 이벤트가 소비되었는지 여부를 알려준다.

boolean isControlDown() - Control 키가 눌려졌는지 여부를

리턴한다.

boolean isMetaDown() - Meta 키가 눌려졌는지 여부를 리턴한다.

boolean isShiftDown() - Shift 키가 눌려졌는지 여부를 리턴한다.

Page 38: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 387.2 7.2 이벤트이벤트 처리처리

2. KeyEvent

KeyEvent는 InputEvent 클래스로부터 상속받는다.

KeyEvent는 사용자가 키보드의 키를 누르거나, 띠거나, 문자를 입력할

때 발생한다.

KeyEvent를 처리하기 위한 KeyListener의 메소드들

void keyPressed(KeyEvent e) - 키보드를 누르는 순간에 호출되는

메소드이다. 또한 키를 계속 누르고 있는 경우에도 이 메소드가

계속 호출된다.

void keyReleased(KeyEvent e) - 눌려진 키보드를 띠는 순간에

호출되는 메소드이다.

void keyTyped(KeyEvent e) - 키보드를 눌렀다 띰으로서 문자를

입력할 때 호출되는 고차원 메소드이다.

KeyEvent의 메소드들

char getKeyChar() - 입력된 문자를 리턴한다.

int getKeyCode() - 입력된 키의 정수형 키 코드 값을 리턴한다.

Page 39: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 397.2 7.2 이벤트이벤트 처리처리

예제: NumberInput.java1 import java.awt.*;2 import java.awt.event.*;34 public class NumberInput extends Frame implements5 ActionListener, KeyListener {67 TextField input;8 Button exit;9

10 public NumberInput() {11 super("숫자 입력");12 input = new TextField();13 input.addKeyListener(this);14 exit = new Button("Exit");15 exit.addActionListener(this);

…………………

Page 40: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 407.2 7.2 이벤트이벤트 처리처리

24 public voidpublic void keyPressedkeyPressed((KeyEventKeyEvent e)e) {25 char c = e.getKeyChar();26 if(!(('0' <= c && c <= '9') || c == '.' ||27 c == '' || c == '')) {28 System.out.println("Not number !!");29 }30 }3132 public voidpublic void keyTypedkeyTyped((KeyEventKeyEvent e)e) { }33 public voidpublic void keyReleasedkeyReleased((KeyEventKeyEvent e)e) { }3435 public void actionPerformed(ActionEvent e) {36 setVisible(false);37 dispose();38 System.exit(0);39 }

………………..

Page 41: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 417.2 7.2 이벤트이벤트 처리처리

7.2.7 TextEventTextEvent는 텍스트 컴포넌트(텍스트 필드, 텍스트 영역)에서 텍스트

내용이 변경되는 경우에 발생한다.

TextEvent를 처리하는 TextListener 인터페이스의 메소드

void textValueChanged(TextEvent e) - 텍스트 내용이 변경되는

경우에 호출된다.

예제: TextEventTest.java1 import java.awt.*;2 import java.awt.event.*;34 public class TextEventTest extends Frame implements5 TextListener, ActionListener {67 TextArea edit;8 Button exit;

Page 42: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 427.2 7.2 이벤트이벤트 처리처리

10 public TextEventTest() {11 super("텍스트 이벤트");12 edit = new TextArea();13 edit.addTextListener(this);14 exit = new Button("Exit");15 exit.addActionListener(this);

…………………23 public void actionPerformed(ActionEvent e) {24 setVisible(false);25 dispose();26 System.exit(0);27 }2829 public voidpublic void textValueChangedtextValueChanged((TextEventTextEvent e)e) {30 System.out.println("텍스트 내용이 변경되었습니다.");31 }

……………………

Page 43: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 437.2 7.2 이벤트이벤트 처리처리

7.2.8 기타

1. 스크롤바의 이벤트

스크롤바에서는 AdjustmentEvent가 발생할 수 있다. 이 이벤트는

AdjustmentListener 인터페이스를 이용해서 처리할 수 있다.

AdjustmentListener 인터페이스의 메소드

void adjustmentValueChanged(AdjustmentEvent e)

- 값이 변경되는 경우에 호출된다.

AdjustmentEvent 클래스의 중요한 메소드

int getValue() - 현재 값을 리턴한다.

2. 컴포넌트 이벤트

ComponentEvent는 컴포넌트가 이동하거나, 크기가 변경되거나, 혹은

화면에 보이거나 안보일 때 발생되는 저수준의 이벤트이다.

Page 44: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 447.2 7.2 이벤트이벤트 처리처리

ComponentEvent를 처리하는 ComponentListener 인터페이스의 메소드

void componentHidden(ComponentEvent e) - 컴포넌트가 화면에서

안보이게 될 때 호출된다.

void componentMoved(ComponentEvent e) - 컴포넌트의 위치가

변경될 때 호출된다.

void componentResized(ComponentEvent e) - 컴포넌트의 크기가

변경될 때 호출된다.

void componentShown(ComponentEvent e) - 컴포넌트가 화면에

보이게 될 때 호출된다.

Page 45: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 457.2 7.2 이벤트이벤트 처리처리

예제: TestCanvas.java1 import java.awt.*;23 public class TestCanvas extends Canvas {4 Image img;5 int tx, ty, w, h;6 Dimension preferredSize;7 String msg;8 Font font;9

10 TestCanvas(String msg) {11 super();12 this.msg = msg;1314 font = new Font("Courier", Font.PLAIN, 16);15 FontMetrics metric = getFontMetrics(font);16 w = metric.stringWidth(msg);17 h = metric.getHeight();18 preferredSize = new Dimension(w+8, h+6);19 }

Page 46: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 467.2 7.2 이벤트이벤트 처리처리

2021 public int getImageWidth() {22 return preferredSize.width;23 }2425 public void update(Graphics g) {26 paint(g);27 }2829 public void paint(Graphics g) {30 if(img == null) {31 img = createImage(w+8,h+6);32 Graphics gc = img.getGraphics();33 gc.setFont(font);34 gc.drawString(msg, 2, h - 4);35 }36 g.translate(-tx, -ty);37 g.drawImage(img, 0, 0, getBackground(), this);38 }39 }

Page 47: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 477.2 7.2 이벤트이벤트 처리처리

예제: TestBar.java1 import java.awt.*;2 import java.awt.event.*;34 public class TestBar extends Frame implements5 ActionListener, AdjustmentListener, ComponentListener {67 Scrollbar bar;8 TestCanvas canvas;9 Button exit;

1011 public TestBar() {12 super("스크롤바 이벤트");13 String msg = "The VisMap system provides for " +14 "visual manipulation of arbitray off-the-shelf " +15 "applications, through an application's graphical" +16 " user interface.";1718 canvas = new TestCanvas(msg);19 canvas.addComponentListener(this);

Page 48: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 487.2 7.2 이벤트이벤트 처리처리

21 bar = new Scrollbar(Scrollbar.HORIZONTAL);22 bar.addAdjustmentListener(this);23 bar.setMaximum(canvas.getImageWidth() -24 canvas.getSize().width);2526 exit = new Button("Exit");27 exit.addActionListener(this);…………….

37 public void adjustmentValueChanged(AdjustmentEvent e) {38 canvas.tx = bar.getValue();39 canvas.repaint();40 }4142 public void actionPerformed(ActionEvent e) {43 setVisible(false);44 dispose();45 System.exit(0);46 }

Page 49: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 497.2 7.2 이벤트이벤트 처리처리

48 public void componentResized(ComponentEvent e) {

49 bar.setMaximum(canvas.getImageWidth() -

50 canvas.getSize().width);

51 }

52

53 public void componentMoved(ComponentEvent e) { }

54 public void componentShown(ComponentEvent e) { }

55 public void componentHidden(ComponentEvent e) { }

…………………….

Page 50: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 507.3 스윙 이벤트

스윙은 기본적으로 AWT의 이벤트를 그대로 사용할 수 있으며, 별도의

컴포넌트를 위해서는 javax.swing.event 패키지에 새로운 이벤트들을

정의하고 있다.

스윙 컴포넌트에서 발생할 수 있는 이벤트들

ListenerComponentaction caret change document,

undoable edititem list

selectionwindow

button X X Xcheck box X X Xcolor chooser X

combobox X X

dialog X

editor pane X X

file chooser X

Page 51: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 517.3 스윙 이벤트

ListenerComponentaction caret change document,

undoable edititem list

selectionwindow

menu item X X X

option pane

popupmenu

progress bar X

password filed

X X X

frame X

internal framelist X

menu

radio button X X X

slider X

Page 52: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 527.3 스윙 이벤트

Listener Component

action caret change document,undoable edit

item list selection

window

tabbed pane X

toggle button X X X

tree

Viewport(used byscrollpane)

X

table X

text area X X

text field X X X

text pane X X

Page 53: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 537.3 스윙 이벤트

스윙 컴포넌트 이벤트에 대한 리스너 인터페이스들과 메소드들

Listener Interface Adapter Class Listener Methods

ActionListener none actionPerformed(ActionEvent)AncestorListener none ancestorAdded(AncestorEvent)

ancestorMoved(AncestorEvent)ancestorRemoved(AncestorEvent)CaretListener none caretUpdate(CaretEvent)

CellEditorListener none editingStopped(ChangeEvent)editingCanceled(ChangeEvent)

ComponentListener ComponentAdapter componentHidden(ComponentEvent)componentMoved(ComponentEvent)componentResized(ComponentEvent)componentShown(ComponentEvent)

ContainerListener ContainerAdapter componentAdded(ContainerEvent)componentRemoved(ContainerEvent)

ChangeListener none stateChanged(ChangeEvent)

Page 54: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 547.3 스윙 이벤트

Listener Interface Adapter Class Listener Methods

DocumentListener none changedUpdate(DocumentEvent)insertUpdate(DocumentEvent)removeUpdate(DocumentEvent)

FocusListener FocusAdapter focusGained(FocusEvent)focusLost(FocusEvent)

HyperlinkListener none hyperlinkUpdate(HyperlinkEvent)InternalFrameListener

InternalFrameAdapter

internalFrameActivated(InternalFrameEvent)internalFrameClosed(InternalFrameEvent)internalFrameClosing(InternalFrameEvent)internalFrameDeactivated(InternalFrameEvent)internalFrameDeiconified(InternalFrameEvent)internalFrameIconified(InternalFrameEvent)internalFrameOpened(InternalFrameEvent)

ItemListener none itemStateChanged(ItemEvent)KeyListener KeyAdapter keyPressed(KeyEvent)

keyReleased(KeyEvent)keyTyped(KeyEvent)

Page 55: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 557.3 스윙 이벤트

Listener Interface Adapter Class Listener Methods

ListDataListener none contentsChanged(ListDataEvent)intervalAdded(ListDataEvent)intervalRemoved(ListDataEvent)

ListSelectionListener none valueChanged(ListSelectionEvent)

MenuDragMouseListener

none menuDragMouseDragged(MenuDragMouseEvent)menuDragMouseEntered(MenuDragMouseEvent)menuDragMouseExited(MenuDragMouseEvent)menuDragMouseReleased(MenuDragMouseEvent)

MenuKeyListener none menuKeyPressed(MenuKeyEvent)menuKeyReleased(MenuKeyEvent)menuKeyTyped(MenuKeyEvent)

MenuListener none menuCanceled(MenuEvent)menuDeselected(MenuEvent)menuSelected(MenuEvent)

Page 56: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 567.3 스윙 이벤트

Listener Interface Adapter Class Listener MethodsMouseInputListener MouseInputAdapt

ermouseClicked(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mousePressed(MouseEvent)mouseReleased(MouseEvent)mouseDragged(MouseEvent)mouseMoved(MouseEvent)

PopupMenuListener popupMenuCanceled(PopupMenuEvent)popupMenuWillBecomeInvisible(PopupMenuEvent)popupMenuWillBecomeVisible(PopupMenuEvent)

MouseListener MouseAdapter mouseClicked(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mousePressed(MouseEvent)mouseReleased(MouseEvent)

MouseMotionListener

MouseMotionAdapter

mouseDragged(MouseEvent)mouseMoved(MouseEvent)

Page 57: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 577.3 스윙 이벤트

Listener Interface Adapter Class Listener Methods

TableColumnModelListener

none columnAdded(TableColumnModelEvent)columnMoved(TableColumnModelEvent)columnRemoved(TableColumnModelEvent)columnMarginChanged(ChangeEvent)columnSelectionChanged(ListSelectionEvent)

TableModelListener none tableChanged(TableModelEvent)

TreeExpansionListener

none treeCollapsed(TreeExpansionEvent)treeExpanded(TreeExpansionEvent)

TreeModelListener none treeNodesChanged(TreeModelEvent)treeNodesInserted(TreeModelEvent)treeNodesRemoved(TreeModelEvent)treeStructureChanged(TreeModelEvent)

TreeSelectionListener

none valueChanged(TreeSelectionEvent)

Page 58: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 587.3 스윙 이벤트

Listener Interface Adapter Class Listener Methods

TreeWillExpandListener none treeWillCollapse(TreeExpansionEvent)treeWillExpand(TreeExpansionEvent)

UndoableEditListener none undoableEditHappened(UndoableEditEvent)

WindowListener WindowAdapter windowActivated(WindowEvent)windowClosed(WindowEvent)windowClosing(WindowEvent)windowDeactivated(WindowEvent)windowDeiconified(WindowEvent)windowIconified(WindowEvent)windowOpened(WindowEvent)

Page 59: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 597.3 스윙 이벤트

대부분의 스윙 컴포넌트들은 AWT와 동일하거나 혹은 유사한 방법으로

이벤트 처리를 할 수 있다. 예를 들어 JButton은 AWT의 Button과

동일하게 ActionEvent를 이용해서 이벤트 처리를 한다.

예제: AddTableRow.java (JButton에서 ActionEvent를 사용하는 예제)

4 import javax.swing.event.*;5 import javax.swing.table.*;67 public class AddTableRow extends JFrame implements ActionListener {8 JButton add;9 DefaultTableModel model;

10 JTable table;1112 public AddTableRow(){13 super("테이블 테스트");14 String fieldName[] = {15 "<html>이름<br>학기순</html>",16 "전화번호",17 "E-Mail"18 };19

Page 60: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 607.3 스윙 이벤트

20 String data[][] = {21 "최종명", "000-0000", "jmchoi@email",22 "박준서", "111-1111", "jspark@email",23 "홍길동", "222-2222", "gdhong@email"24 };2526 model = new DefaultTableModel(data, fieldName);27 table = new JTable(model);28 JScrollPane sp = new JScrollPane(table);29 getContentPane().add(sp, BorderLayout.CENTER);30 add = new JButton("ADD");31 add.addActionListener(this);32 getContentPane().add(add, BorderLayout.SOUTH);33 setDefaultCloseOperation(EXIT_ON_CLOSE);

………………..38 public void actionPerformed(ActionEvent e) {39 String data [] = "", "" ;40 model.addRow(data);41 }

…………………

Page 61: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 617.3 스윙 이벤트

TreeSelectionEventJTree에서 노드를 선택하는 순간에 TreeSelectionEvent가 발생한다.

TreeSelectionListener에는 valueChanged() 메소드를 가지고 있다.

따라서, 이 메소드를 이용하는 경우에 선택된 노드를 파악할 수 있다.

예제: TreeSelection.java1 import java.awt.*;2 import javax.swing.*;3 import javax.swing.tree.*;4 import javax.swing.event.*;56 public class TreeSelection extends JFrame {7 JTree tree;89 public TreeSelection()10 super("트리 선택");11 DefaultMutableTreeNode jcomponent =12 new DefaultMutableTreeNode("JComponent");1314 DefaultMutableTreeNode jpanel =15 new DefaultMutableTreeNode("JPanel");

Page 62: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 627.3 스윙 이벤트

16 DefaultMutableTreeNode jtextcomponent =17 new DefaultMutableTreeNode("JTextComponent");18 DefaultMutableTreeNode jtree =19 new DefaultMutableTreeNode("JTree");2021 jcomponent.add(jpanel);22 jcomponent.add(jtextcomponent);23 jcomponent.add(jtree);2425 DefaultMutableTreeNode jtextarea =26 new DefaultMutableTreeNode("JTextArea");27 DefaultMutableTreeNode jtextfield =28 new DefaultMutableTreeNode("JTextField");2930 jtextcomponent.add(jtextarea);31 jtextcomponent.add(jtextfield);3233 tree = new JTree(jcomponent);

Page 63: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 637.3 스윙 이벤트

34 tree.addTreeSelectionListener(new TreeSelectionListener() {35 public void valueChanged(TreeSelectionEvent e) {36 DefaultMutableTreeNode node = (DefaultMutableTreeNode)37 tree.getLastSelectedPathComponent();3839 if (node == null)40 return;4142 Object nodeInfo = node.getUserObject();43 System.out.println(nodeInfo.toString());44 }45 });4647 JScrollPane sp = new JScrollPane(tree);48 getContentPane().add(sp, BorderLayout.CENTER);

……………….

Page 64: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 647.3 스윙 이벤트

TableModelEventTableModelEvent 이벤트는 테이블의 값이 변경되는 경우에 발생한다.

TableModelListener 인터페이스는 tableChanged()라는 메소드를 가지고

있으며, TableModel에 이벤트 리스너를 등록한다.

예제: TableEventDemo.java 1 import java.awt.*;2 import javax.swing.*;3 import javax.swing.event.*;4 import javax.swing.table.*;56 public class TableEventDemo extends JFrame{78 public TableEventDemo()9 super("테이블 테스트");

10 String fieldName[] = {11 "<html>이름<br>학기순</html>",12 "전화번호",13 "E-Mail"14 };15

Page 65: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 657.3 스윙 이벤트

16 String data[][] = {17 "최종명", "000-0000", "jmchoi@email",18 "박준서", "111-1111", "jspark@email",19 "홍길동", "222-2222", "gdhong@email"20 };2122 JTable table = new JTable(data, fieldName);23 TableModel model = table.getModel();24 model.addTableModelListener(new TableModelListener() {25 public void tableChanged(TableModelEvent e) {26 int col = e.getColumn();27 int row = e.getFirstRow();28 System.out.println("<" + row + "," + col +">");29 }30 });31 JScrollPane sp = new JScrollPane(table);32 getContentPane().add(sp, BorderLayout.CENTER);

…………………..

Page 66: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 667.4 7.4 이벤트이벤트 프로그래밍프로그래밍 응용응용

GEditor이벤트 를 이용해서 그래픽 에디터를 만드는 예제 프로그램

버튼, 라벨, 텍스트영역, 텍스트필드 모양을 그려주고 자바 코드로 변환해

주는 그래픽 에디터

GEditor 에서는 각 그림들의 이동과 크기 변경이 가능

Page 67: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 677.4 7.4 이벤트이벤트 프로그래밍프로그래밍 응용응용

GEditor에서 그림을 그리고, 메뉴에서 Code Gen을 선택하면 그려진

모양에 해당되는 자바 코드가 생성됨.

다음 그림은 생성된 자바 코드를 컴파일해서 실행시킨 결과

Page 68: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 687.4 7.4 이벤트이벤트 프로그래밍프로그래밍 응용응용

GEDrawable 인터페이스

그래픽 에디터에서 그림을 핸들링하기 위한 기본적인 메소드들을 선언

GEDrawableRectangle 클래스

그래픽 에디터에서 가장 많이 사용될 수 있는 그림 클래스

Bbutton, Blabel, BtextArea, BtextField 클래스

버튼, 라벨, 텍스트 영역, 텍스트 필드 모양을 그려주기 위한 클래스

GEditorCanvas 클래스

그림을 그려주는 캔버스 영역

GEditor 클래스

각 클래스를 모아 작성한 그래픽 에디터

GEditor 예제 프로그램은 간단하지만, 그래픽 에디터나 인터페이스 빌더

등의 응용 분야에 적용될 수 있을 것이다.

Page 69: 제1장 자바 언어 소개mm.sookmyung.ac.kr/~yiyoon/Lecture/JAVA/7_Event.pdf · 2008-03-18 · 7. 이벤트프로그래밍 4 z이벤트-드리븐(event-driven) 프로그래밍

Event 69

GEDrawable: interface methods

GEDrawableRectangle

Implement : move, resize

Blabel BtextField Bbutton BtextAreaBvscroll class

Bhscroll class

Inheritance from GEDrawableRectangle Link two other classes

Geditor- Menu Handle

GEditorVanvas- Canvas Handle

Mouse Handler

MouseMotionListner

Calls via Event Handler