• 검색 결과가 없습니다.

7.3 : 이벤트 부분

N/A
N/A
Protected

Academic year: 2022

Share "7.3 : 이벤트 부분"

Copied!
69
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

프로그래머를

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

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

7.2 : AWT event 7.3 : Swing event 신 버전 (2006년 이후)의

7.3 : 이벤트 부분

(2)

Event

이벤트

2

이벤트 ( ( 신 신 7.3) 7.3)

z

이벤트

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

z

이벤트 드리븐 프로그래밍

z

이벤트 분류

† Low level event – 세부적인 이벤트

† High level event – 논리적인 이벤트

(3)

Event

이벤트

3

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

z

이벤트 프로그램 작성 요령

† GUI 컴포넌트(예: JButton)를 생성한다.

† 이벤트 리스너 인터페이스(예: ActionListener)를 구현하는 클래스를 작성한다.

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

z

이벤트 관련 패키지

† java.awt.event

† javax.swing.event

(4)

Event

7.

4

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

z

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

† 마우스 버튼 클릭, 더블 클릭, 마우스 이동 등의 모든 사용자 액션에 대해 응답하는 형태로 작동하도록 하는 프로그래밍

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

방식으로 작성된다.

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

(5)

Event

7.1 AWT

5

7.1 AWT 이벤트 이벤트

z

고수준 이벤트

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

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

z

저수준 이벤트

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

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

z

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

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

 Button ok = new Button("OK");

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

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

 ok.addActionListener(...)

(6)

Event

7.1 AWT

6

7.1 AWT 이벤트 이벤트

z

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

† ActionListener 인터페이스를 임플리멘츠해야 한다.

† ActionListener 인터페이스를 임플리멘츠하는 클래스는 actionPerformed() 메소드를 만들어야 한다.

† 버튼에서 클릭이 발생하면 아래 그림과 같이 등록된 이벤트 핸들러 클래스의

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

(7)

Event

7.1 AWT

7

7.1 AWT 이벤트 이벤트

z

버튼에 수행내용 등록

† addActionListener(..) 메소드 이용.

† 이 메소드의 매개변수는 버튼 클릭에 의해 작업할 내용을 갖는 객체임.

† 버튼을 클릭하면 actionPerformed(ActionEvent )가 수행되도록 약속되어 있음.

† 객체에 actionPerfomed(ActionEvent) 메소드가 있음을 보장하기 위해 ActionListener인터페이스를 임프리멘츠함.

...

....

...

O K

implements ActionListener

public void actionPerformed (ActionEvent e) {

...

} Button ok = new Button("OK");

ok.addActionListener( );

class 등록

(8)

Event

이벤트

8

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

z

예제 : 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");

(9)

Event

이벤트

9

이벤트 클래스들 클래스들

z

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

(10)

Event

이벤트

10

이벤트 클래스들 클래스들

z

EventObject

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

z

ActionEvent

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

z

ItemEvent

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

z

MouseEvent, MouseWheelEvent

† 마우스 작동

z

KeyEvent

† 키보드 입력

(11)

Event

이벤트

11

이벤트 처리 처리

z

이벤트 처리 절차

(12)

Event

7.1 AWT

12

7.1 AWT 이벤트 이벤트

z

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

발생할 수 있는 이벤트 AWT

컴포넌트 action adjus tment

comp onent

cont ainer

focu s

ite m

ke y

mous e

mouse motio

n

text window

Button Canvas Checkbox Checkbox MenuItem Choice Componen tContainer Dialog Frame Label

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 X X

(13)

Event

7.1 AWT

13

7.1 AWT 이벤트 이벤트

발생할 수 있는 이벤트 AWT

컴포넌트 actio

n

adjust ment

com pone nt

cont ainer

focu s

ite m

key mous e

mouse motio n

text window

List

MenuItem Panel Scrollbar ScrollPane TextArea TextCompo nent

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

(14)

Event

7.1 AWT

14

7.1 AWT 이벤트 이벤트

z 각 이벤트에 따라 등록해야 하는 인터페이스들이 있다.

z 인터페이스 이름은 “

이벤트 이름 +Listener”의 형태이다.

z

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

Listener Interface Adapter Class Methods ActionListener none actionPerformed(ActionEvent)

AdjustmentListener none adjustmentValueChanged(AdjustmentEven ComponentListener ComponentAdapt t)

er

componentHidden(ComponentEvent) componentMoved(ComponentEvent) componentResized(ComponentEvent) componentShown(ComponentEvent) ContainerListener ContainerAdapter componentAdded(ContainerEvent)

componentRemoved(ContainerEvent)

(15)

Event

7.1 AWT

15

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)

(16)

Event

7.1 AWT

16

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

(17)

Event

7.2

17

7.2 이벤트 이벤트 처리 처리

7.2.1 기본적인 클래스들

1. EventObject 클래스

† java.util 패키지의 EventObject는 모든 이벤트 클래스들에서 가장 상위에 있는 클래스이다. 따라서 모든 이벤트 클래스들은 직접 혹은 간접적으로 이 클래스로부터 상속받고 있다.

† 생성자와 메소드



EventObject(Object source) - EventObject 타입의 객체를 생성.



Object getSource() - 이벤트가 발생한 객체를 리턴.



String toString() - 이벤트를 문자열로 리턴.

(18)

Event

7.2

18

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() - 이벤트의 상태를 문자열로 리턴.

(19)

Event

7.2

19

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를 생성한다.

(20)

Event

7.2

20

7.2 이벤트 이벤트 처리 처리

† ActionEvent는 다음과 같은 메소드들을 가진다.



String getActionCommand() - 액션과 관련된 명령어 문자열을 리턴한다.



int getModifiers() - 액션이 발생할 때 눌려진 모디파이어 키를 리턴한다. 모디파이어 키는 쉬프트, 알트, 컨트롤 키를 의미한다.

1. 버튼

† 버튼을 마우스로 클릭하는 경우에 ActionEvent가 발생.

† 버튼의 액션 이벤트를 처리하기 위해서는 버튼을 생성한 후에

addActionListener() 메소드를 호출해서 이벤트 처리 루틴을 등록해주어야함.

† ActionListener 인터페이스에는 actionPerformed()가 선언되어 있으므로 임플리멘츠하는 클래스는 actionPerformed()를 정의해주어야함 .

(21)

Event

7.2

21

7.2 이벤트 이벤트 처리 처리

z 예제: ButtonEvent.java 1 import java.awt.*;

2 import java.awt.event.*;

3

4 public class ButtonEvent extends Frame implements ActionListener { 5 Button exit, print;

6

7 public ButtonEvent() {

8 super("버튼의 이벤트 테스트");

9 print = new Button("Hello");

10 print.addActionListener(this);

11

12 exit = new Button("Exit");

13 exit.addActionListener(this);

14

15 add("North", print);

16 add("South", exit);

17

18 setSize(300, 200);

(22)

Event

7.2

22

7.2 이벤트 이벤트 처리 처리

19 setVisible(true);

20 } 21

22 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 } 31

32 public static void main(String args[]) { 33 ButtonEvent be = new ButtonEvent();

34 } 35 }

(23)

Event

7.2

23

7.2 이벤트 이벤트 처리 처리

`

2. 텍스트 필드

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

z 예제: TextFieldEvent.java 1 import java.awt.*;

2 import java.awt.event.*;

3

4 public class TextFieldEvent extends Frame implements ActionListener { 5 TextField one, two;

6 Button exit;

7

8 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);

(24)

Event

7.2

24

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);

………

(25)

Event

7.2

25

7.2 이벤트 이벤트 처리 처리

7.2.3 ItemEvent

† ItemEvent는 체크박스, 라디오버튼, 선택, 리스트에서 아이템이 선택되거나 선택이 해제되는 경우에 발생하는 고수준 이벤트이다.

† ItemEvent의 멤버 필드



static int DESELECTED - 선택이 해제된 것



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



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

† ItemEvent의 생성자



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

(26)

Event

7.2

26

7.2 이벤트 이벤트 처리 처리

† ItemEvent의 메소드



Object getItem() - 이벤트에 의해 영향받는 아이템을 리턴한다.



ItemSelectable getItemSelectable() - 이벤트의 발생지를 리턴한다.



int getStateChange() - 변경된 상태를 리턴한다.

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

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

† ItemListener 인터페이스는 itemStateChanged() 메소드를 가지고 있다.



void itemStateChanged(ItemEvent e)

- 아이템이 선택되거나 선택이 해제될 때 자동적으로 호출된다.

(27)

Event

7.2

27

7.2 이벤트 이벤트 처리 처리

1. 체크 박스

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

z 예제: CheckEvent.java

………..

4 public class CheckEvent extends Frame

5 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);

19

20 Panel bottom = new Panel();

21 cbg = new CheckboxGroup();

22 bottom.add(male = new Checkbox("남자", cbg, true));

23 male.addItemListener(this);

(28)

Event

7.2

28

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();

46

47 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 }

………..

(29)

Event

7.2

29

7.2 이벤트 이벤트 처리 처리

2. 선택 버튼(Choice)

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

3. 라디오 버튼(Radio)

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

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

4. 리스트(List)

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

(30)

Event

7.2

30

7.2 이벤트 이벤트 처리 처리

z 예제: ChoiceListEvent.java

………

4 public class ChoiceListEvent extends Frame 5 implements ActionListener, ItemListener {

………

11 public ChoiceListEvent() {

12 super("Choice와 List 이벤트");

13

14 fruits = new Choice();

15 fruits.addItemListener(this);

16 fruits.add("Apple");

17 fruits.add("Orange");

18 fruits.add("Banna");

19

20 color = new List(3, true);

21 color.addItemListener(this);

22 color.addActionListener(this);

23 color.add("blue");

24 color.add("red");

………

(31)

Event

7.2

31

7.2 이벤트 이벤트 처리 처리

51 public void itemStateChanged

itemStateChanged

(

(

ItemEvent

ItemEvent

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 }

………..

(32)

Event

7.2

32

7.2 이벤트 이벤트 처리 처리

7.2.4 WindowEvent

† 윈도우의 상태가 변경될 때 발생하는 저수준의 이벤트.

† 윈도우가 열리는 경우, 닫히는 경우, 활성화되는 경우, 비활상화되는 경우,

아이콘이 되는 경우, 아이콘에서 원도우로 다시 변경되는 경우에 발생.

† 윈도우, 다이얼로그, 프레임에서 발생할 수 있다.

† WindowEvnet의 생성자와 메소드



WindowEvent(Window source, int id) - WindowEvent를 생성한다.



Window getWindow() - 이벤트가 발생한 윈도우를 리턴한다.

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

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

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

(33)

Event

7.2

33

7.2 이벤트 이벤트 처리 처리

z 예제: FrameEvent.java

………..

4 public class FrameEvent extends Frame { 5 Label msg;

6

7 public FrameEvent() {

………..

12 addWindowListener(new WindowHandler());

13 setSize(300, 200);

14 setVisible(true);

15 } 16

17 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 }

………..

(34)

Event

7.2

34

7.2 이벤트 이벤트 처리 처리

7.2.5 MouseEvent

† 마우스 관련 이벤트는 마우스 클릭과 마우스 이동에 관한 2가지 형태로 분류할 수 있다 .

 마우스 클릭 관련 이벤트는 MouseListener 인터페이스에서 관리

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

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

† 예제: DrawRect.java

6 int startX, startY, w, h;

7

8 public void init() {

9 addMouseListener(new MouseEventHandler());

10 addMouseMotionListener(new MouseMotionHandler());

(35)

Event

7.2

35

7.2 이벤트 이벤트 처리 처리

……

21 public class MouseMotionHandler extends

extends

MouseMotionAdapter {

MouseMotionAdapter

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 extends

extends

MouseAdapter {

MouseAdapter

30 public void mousePressed(MouseEvent e) {

31 startX = e.getX();

32 startY = e.getY();

33 } 34

35 public void mouseReleased(MouseEvent e) { 36 w = Math.abs(startX - e.getX());

37 h = Math.abs(startY - e.getY());

38 repaint();

……

(36)

Event

7.2

36

7.2 이벤트 이벤트 처리 처리

7.2.6 KeyEvent

1. InputEvent

† InputEvent는 KeyEvent와 MouseEvent의 부모 클래스로서, 모든 컴포넌트의 입력을 위한 이벤트의 가장 상위 클래스이다.

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

리스너로 먼저 전달된다. 따라서, 필요한 경우에는 리스너(listener) 부분에서 먼저 이벤트를 처리하고, 이벤트가 발생한 컴포넌트가 디폴트 작업하지 못하도록 할 수 있다.

† InputEvent의 메소드



void consume() - 이 벤 트 가 발 생 한 컴 포 넌 트 에 서 디 폴 트 로 작업하지 안도록 이벤트를 소비한다.



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

(37)

Event

7.2

37

7.2 이벤트 이벤트 처리 처리



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



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



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



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



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



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

(38)

Event

7.2

38

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() - 입력된 키의 정수형 키 코드 값을 리턴한다.

(39)

Event

7.2

39

7.2 이벤트 이벤트 처리 처리

z 예제: NumberInput.java 1 import java.awt.*;

2 import java.awt.event.*;

3

4 public class NumberInput extends Frame implements 5 ActionListener, KeyListener {

6

7 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);

………

(40)

Event

7.2

40

7.2 이벤트 이벤트 처리 처리

24 public voidpublic void keyPressed

keyPressed

(

(

KeyEvent

KeyEvent

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 } 31

32 public voidpublic void keyTyped(

keyTyped

(KeyEventKeyEvent e) { }

e)

33 public voidpublic void keyReleased

keyReleased

(

(

KeyEvent

KeyEvent

e) { }

e)

34

35 public void actionPerformed(ActionEvent e) { 36 setVisible(false);

37 dispose();

38 System.exit(0);

39 }

………..

(41)

Event

7.2

41

7.2 이벤트 이벤트 처리 처리

7.2.7 TextEvent

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

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

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



void textValueChanged(TextEvent e) - 텍스트 내용이 변경되는 경우에 호출된다.

z 예제: TextEventTest.java 1 import java.awt.*;

2 import java.awt.event.*;

3

4 public class TextEventTest extends Frame implements 5

TextListener, ActionListener {

6

7 TextArea edit;

8 Button exit;

(42)

Event

7.2

42

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 } 28

29 public void

public void

textValueChanged

textValueChanged

(

(

TextEvent

TextEvent

e) {

e)

30 System.out.println("텍스트 내용이 변경되었습니다.");

31 }

………

(43)

Event

7.2

43

7.2 이벤트 이벤트 처리 처리

7.2.8 기타

1. 스크롤바의 이벤트

† 스 크 롤 바 에 서 는 AdjustmentEvent가 발생할 수 있다. 이 이벤트는 AdjustmentListener 인터페이스를 이용해서 처리할 수 있다.

† AdjustmentListener 인터페이스의 메소드



void adjustmentValueChanged(AdjustmentEvent e) - 값이 변경되는 경우에 호출된다.

† AdjustmentEvent 클래스의 중요한 메소드



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

2. 컴포넌트 이벤트

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

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

(44)

Event

7.2

44

7.2 이벤트 이벤트 처리 처리

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



void componentHidden(ComponentEvent e) - 컴포넌트가 화면에서 안보이게 될 때 호출된다.



void componentMoved(ComponentEvent e) - 컴포넌트의 위치가 변경될 때 호출된다.



void componentResized(ComponentEvent e) - 컴포넌트의 크기가 변경될 때 호출된다.



void componentShown(ComponentEvent e) - 컴포넌트가 화면에 보이게 될 때 호출된다.

(45)

Event

7.2

45

7.2 이벤트 이벤트 처리 처리

z 예제: TestCanvas.java 1 import java.awt.*;

2

3 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;

13

14 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 }

(46)

Event

7.2

46

7.2 이벤트 이벤트 처리 처리

20

21 public int getImageWidth() { 22 return preferredSize.width;

23 } 24

25 public void update(Graphics g) { 26 paint(g);

27 } 28

29 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 }

(47)

Event

7.2

47

7.2 이벤트 이벤트 처리 처리

z 예제: TestBar.java 1 import java.awt.*;

2 import java.awt.event.*;

3

4 public class TestBar extends Frame implements

5 ActionListener, AdjustmentListener, ComponentListener { 6

7 Scrollbar bar;

8 TestCanvas canvas;

9 Button exit;

10

11 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.";

17

18 canvas = new TestCanvas(msg);

19 canvas.addComponentListener(this);

(48)

Event

7.2

48

7.2 이벤트 이벤트 처리 처리

21 bar = new Scrollbar(Scrollbar.HORIZONTAL);

22 bar.addAdjustmentListener(this);

23 bar.setMaximum(canvas.getImageWidth() - 24 canvas.getSize().width);

25

26 exit = new Button("Exit");

27 exit.addActionListener(this);

……….

37 public void adjustmentValueChanged(AdjustmentEvent e) { 38 canvas.tx = bar.getValue();

39 canvas.repaint();

40 } 41

42 public void actionPerformed(ActionEvent e) { 43 setVisible(false);

44 dispose();

45 System.exit(0);

46 }

(49)

Event

7.2

49

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) { }

……….

(50)

Event

7.3 스윙 이벤트

50

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

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

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

Listener Component

action caret change document, undoable edit

item list

selection window

button X X X

check box X X X

color chooser X

combobox X X

dialog X

editor pane X X

file chooser X

(51)

Event

7.3 스윙 이벤트

51

Listener Component

action caret change document, undoable edit

item list

selection window

menu item X X X

option pane

popupmenu

progress bar X

password

filed X X X

frame X

internal frame

list X

menu

radio button X X X

slider X

(52)

Event

7.3 스윙 이벤트

52

Listener Component

action caret change document, undoable edit

item list selection

window

tabbed pane X

toggle button X X X

tree

Viewport(used by

scrollpane)

X

table X

text area X X

text field X X X

text pane X X

(53)

Event

7.3 스윙 이벤트

53

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

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(ComponentEv ent)

componentMoved(ComponentEve nt)

componentResized(ComponentEv ent)

componentShown(ComponentEve nt)

ContainerListener ContainerAdapter componentAdded(ContainerEvent )

componentRemoved(ContainerEv ent)

ChangeListener none stateChanged(ChangeEvent)

(54)

Event

7.3 스윙 이벤트

54

Listener Interface Adapter Class Listener Methods DocumentListener none changedUpdate(DocumentEvent)

insertUpdate(DocumentEvent) removeUpdate(DocumentEvent) FocusListener FocusAdapter focusGained(FocusEvent)

focusLost(FocusEvent)

HyperlinkListener none hyperlinkUpdate(HyperlinkEvent) InternalFrameListen

er

InternalFrameAdapt er

internalFrameActivated(InternalFrameEvent) internalFrameClosed(InternalFrameEvent) internalFrameClosing(InternalFrameEvent) internalFrameDeactivated(InternalFrameEven t)

internalFrameDeiconified(InternalFrameEvent )

internalFrameIconified(InternalFrameEvent) internalFrameOpened(InternalFrameEvent) ItemListener none itemStateChanged(ItemEvent)

KeyListener KeyAdapter keyPressed(KeyEvent) keyReleased(KeyEvent) keyTyped(KeyEvent)

(55)

Event

7.3 스윙 이벤트

55

Listener Interface Adapter Class Listener Methods ListDataListener none contentsChanged(ListDataEvent)

intervalAdded(ListDataEvent) intervalRemoved(ListDataEvent) ListSelectionListener none valueChanged(ListSelectionEvent) MenuDragMouseList

ener

none menuDragMouseDragged(MenuDragMouseEve nt)

menuDragMouseEntered(MenuDragMouseEven t)

menuDragMouseExited(MenuDragMouseEvent) menuDragMouseReleased(MenuDragMouseEv ent)

MenuKeyListener none menuKeyPressed(MenuKeyEvent) menuKeyReleased(MenuKeyEvent) menuKeyTyped(MenuKeyEvent) MenuListener none menuCanceled(MenuEvent)

menuDeselected(MenuEvent) menuSelected(MenuEvent)

(56)

Event

7.3 스윙 이벤트

56

Listener Interface Adapter Class Listener Methods MouseInputListener MouseInputAdapt

er

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

PopupMenuListener popupMenuCanceled(PopupMenuEvent)

popupMenuWillBecomeInvisible(PopupMenuEve nt)

popupMenuWillBecomeVisible(PopupMenuEven MouseListener MouseAdapter t)mouseClicked(MouseEvent)

mouseEntered(MouseEvent) mouseExited(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent) MouseMotionListene

r

MouseMotionAda pter

mouseDragged(MouseEvent) mouseMoved(MouseEvent)

(57)

Event

7.3 스윙 이벤트

57

Listener Interface Adapter Class Listener Methods TableColumnModelLi

stener

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

columnSelectionChanged(ListSelectionEvent) TableModelListener none tableChanged(TableModelEvent)

TreeExpansionListen er

none treeCollapsed(TreeExpansionEvent) treeExpanded(TreeExpansionEvent) TreeModelListener none treeNodesChanged(TreeModelEvent)

treeNodesInserted(TreeModelEvent) treeNodesRemoved(TreeModelEvent) treeStructureChanged(TreeModelEvent) TreeSelectionListene

r

none valueChanged(TreeSelectionEvent)

(58)

Event

7.3 스윙 이벤트

58

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)

(59)

Event

7.3 스윙 이벤트

59

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

이 벤 트 처 리 를 할 수 있 다 . 예 를 들 어 JButton 은 AWT 의 Button 과 동일하게 ActionEvent를 이용해서 이벤트 처리를 한다.

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

4 import javax.swing.event.*;

5 import javax.swing.table.*;

6

7 public class AddTableRow extends JFrame implements ActionListener { 8 JButton add;

9 DefaultTableModel model;

10 JTable table;

11

12 public AddTableRow(){

13 super("테이블 테스트");

14 String fieldName[] = {

15 "<html>이름<br>학기순</html>", 16 "전화번호",

17 "E-Mail"

18 };

19

(60)

Event

7.3 스윙 이벤트

60

20 String data[][] = {

21 "최종명", "000-0000", "jmchoi@email", 22 "박준서", "111-1111", "jspark@email", 23 "홍길동", "222-2222", "gdhong@email"

24 };

25

26 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 }

………

(61)

Event

7.3 스윙 이벤트

61

z

TreeSelectionEvent

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

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

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

† 예제: TreeSelection.java 1 import java.awt.*;

2 import javax.swing.*;

3 import javax.swing.tree.*;

4 import javax.swing.event.*;

5

6 public class TreeSelection extends JFrame { 7 JTree tree;

8

9 public TreeSelection() 10 super("트리 선택");

11 DefaultMutableTreeNode jcomponent =

12 new DefaultMutableTreeNode("JComponent");

13

14 DefaultMutableTreeNode jpanel =

15 new DefaultMutableTreeNode("JPanel");

(62)

Event

7.3 스윙 이벤트

62

16 DefaultMutableTreeNode jtextcomponent =

17 new DefaultMutableTreeNode("JTextComponent");

18 DefaultMutableTreeNode jtree =

19 new DefaultMutableTreeNode("JTree");

20

21 jcomponent.add(jpanel);

22 jcomponent.add(jtextcomponent);

23 jcomponent.add(jtree);

24

25 DefaultMutableTreeNode jtextarea =

26 new DefaultMutableTreeNode("JTextArea");

27 DefaultMutableTreeNode jtextfield =

28 new DefaultMutableTreeNode("JTextField");

29

30 jtextcomponent.add(jtextarea);

31 jtextcomponent.add(jtextfield);

32

33 tree = new JTree(jcomponent);

(63)

Event

7.3 스윙 이벤트

63

34 tree.addTreeSelectionListener(new TreeSelectionListener() { 35 public void valueChanged(TreeSelectionEvent e) {

36 DefaultMutableTreeNode node =

(DefaultMutableTreeNode)

37 tree.getLastSelectedPathComponent();

38

39 if (node == null) 40 return;

41

42 Object nodeInfo = node.getUserObject();

43 System.out.println(nodeInfo.toString());

44 } 45 });

46

47 JScrollPane sp = new JScrollPane(tree);

48 getContentPane().add(sp, BorderLayout.CENTER);

……….

(64)

Event

7.3 스윙 이벤트

64

z

TableModelEvent

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

† TableModelListener 인터페이스는 tableChanged()라는 메소드를 가지고 있으며, TableModel에 이벤트 리스너를 등록한다.

† 예제: TableEventDemo.java 1 import java.awt.*;

2 import javax.swing.*;

3 import javax.swing.event.*;

4 import javax.swing.table.*;

5

6 public class TableEventDemo extends JFrame{

7

8 public TableEventDemo() 9 super("테이블 테스트");

10 String fieldName[] = {

11 "<html>이름<br>학기순</html>", 12 "전화번호",

13 "E-Mail"

14 };

15

(65)

Event

7.3 스윙 이벤트

65

16 String data[][] = {

17 "최종명", "000-0000", "jmchoi@email", 18 "박준서", "111-1111", "jspark@email", 19 "홍길동", "222-2222", "gdhong@email"

20 };

21

22 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);

………..

(66)

Event

7.4

66

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

z

GEditor

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

† 버튼, 라벨, 텍스트영역, 텍스트필드 모양을 그려주고 자바 코드로 변환해 주는 그래픽 에디터

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

(67)

Event

7.4

67

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

† GEditor에서 그림을 그리고, 메뉴에서 Code Gen을 선택하면 그려진 모양에 해당되는 자바 코드가 생성됨.

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

(68)

Event

7.4

68

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

† GEDrawable 인터페이스



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

† GEDrawableRectangle 클래스



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

† Bbutton, Blabel, BtextArea, BtextField 클래스



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

† GEditorCanvas 클래스



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

† GEditor 클래스



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

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

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

(69)

Event 69

GEDrawable: interface methods

GEDrawableRectangle

Implement : move, resize

Blabel BtextField Bbutton BtextArea

Bvscroll class Bhscroll class Inheritance from GEDrawableRectangle Link two other classes

Geditor - Menu Handle

GEditorVanvas - Canvas Handle

Mouse Handler

MouseMotionListner

Calls via Event Handler

참조

관련 문서

SQUARE Meeting Centre, Rue Mont des Arts, Brussels | Events/Conf/Fairs 12.03 Justice and citizens rights - None. European Day for

: Microsoft Wi-Fi Direct Virtual Adapter 물리적 주소.. : Microsoft Wi-Fi Direct Virtual Adapter #2

– mouseover 이벤트와 mouseenter 이벤트의 차이를 보여줌 – mouseover는, 내부 태그로 들어가도 발생함. 

그 외 사회 전반에 적용되는 광의의 플랫폼 - 공용플랫폼/ 디자인 플랫폼/ 브랜드 플랫폼 등. 플랫폼은 공용하고 차량의 스타일 등을 결정하는

■ 인접 플랫폼이나 신규 플랫폼을 상시 모니터링 하여 자사의 플랫폼 전략에 반영할 필요 있음. 외부 환경과 기업 상황에 맞는

http://blog.naver.com/op2330

적절한 영양은 운동/훈련에 의한 상해를 줄이고, 상해로 부터의 회복 속도를 빠르게 해 훈련에 따른 최적의 신체 상태를 유지시킴.. 적절한 영양의 공급은 경기를

*단어 사이의 공통성과