제1장 자바 언어 소개

Similar documents
슬라이드 1

gnu-lee-oop-kor-lec10-1-chap10

Microsoft PowerPoint - 06-Chapter09-Event.ppt

제8장 자바 GUI 프로그래밍 II

<4D F736F F F696E74202D20C1A63138C0E520C0CCBAA5C6AE20C3B3B8AE28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

9장.key

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

운동시뮬레이션 강의 소개

<4D F736F F F696E74202D20C1A63230C0E520BDBAC0AE20C4C4C6F7B3CDC6AE203128B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

10장.key

오버라이딩 (Overriding)

(Microsoft PowerPoint - LZVNQBAJWGTC.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - 04-UDP Programming.ppt

자바GUI실전프로그래밍2_장대원.PDF

11장.key

PowerPoint Template

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

No Slide Title

Cluster management software

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - EEL2 Lecture10 -Swing and Event Handling.pptx

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

강의자료

JTable과 MVC(Model-View-Controller) 구조 - 모델-뷰-컨트롤러구조는데이터의저장과접근에대한제공은모델이담당하고, 화면표시는뷰, 이벤트의처리는컨트롤러가하도록각역할을구분한구조이다. 즉, 역할의분담을통하여상호간의영향을최소화하고각요소의독립성을보장하여독자

Chap12

PowerPoint Presentation

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

제8장 자바 GUI 프로그래밍 II

Network Programming

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - ÀÚ¹Ù08Àå-2.ppt

Microsoft PowerPoint - 14주차 강의자료

Java Programing Environment

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

PowerPoint Presentation

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Cluster management software

gnu-lee-oop-kor-lec06-3-chap7

Microsoft PowerPoint - Java7.pptx

public class FlowLayoutPractice extends JFrame { public FlowLayoutPractice() { super("flowlayout Practice"); this. Container contentpane = getcontentp

Design Issues

Microsoft PowerPoint 자바-AWT컴포넌트(Ch8).pptx

10 이벤트 처리와 그래픽 프로그래밍.key

제11장 프로세스와 쓰레드

PowerPoint Presentation

PowerPoint Presentation

Microsoft PowerPoint - Java-03.pptx

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 2강

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

슬라이드 1

09-interface.key

No Slide Title

중간고사

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

슬라이드 1

PowerPoint Presentation

Javascript

PowerPoint 프레젠테이션

DB 에데이터저장을위한입력창설계 - JLabel, JTextField, JButton 을이용한입력창설계 - 2 -

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

02 C h a p t e r Java

자바로

PowerPoint 프레젠테이션

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

05-class.key

PowerPoint 프레젠테이션

rmi_박준용_final.PDF

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

Microsoft PowerPoint - java1-lecture10.ppt [호환 모드]

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Spring Boot/JDBC JdbcTemplate/CRUD 예제

어댑터뷰

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

PowerPoint 프레젠테이션

Cluster management software

Microsoft PowerPoint - Lect04.pptx

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

모든스윙컴포넌트에는텍스트옆에이미지를추가로표시할수있다. ImageIcon image = new ImageIcon("image.gif"); JLabel label = new JLabel(" 이미지레이블 "); label.seticon(image);

쉽게 풀어쓴 C 프로그래밍

12-file.key

PowerPoint 프레젠테이션

10-Java Applet

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

<4D F736F F F696E74202D205B4A415641C7C1B7CEB1D7B7A1B9D65D3130C0E5C0CCBAA5C6AEC3B3B8AE>

Microsoft PowerPoint - [JAVA프로그래밍]9장GUI

PowerPoint 프레젠테이션

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

JUNIT 실습및발표

UI TASK & KEY EVENT

01-OOPConcepts(2).PDF

윈도우시스템프로그래밍

Transcription:

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

이벤트 ( 신 7.3) 2 이벤트 사용자의액션혹은시스템의어떤사건 이벤트드리븐프로그래밍 이벤트분류 Low level event 세부적인이벤트 High level event 논리적인이벤트

이벤트프로그램작성 ( 신 7.3) 3 이벤트프로그램작성요령 GUI 컴포넌트 ( 예 : JButton) 를생성한다. 이벤트리스너인터페이스 ( 예 : ActionListener) 를구현하는클래스를작성한다. GUI 컴포넌트에이벤트리스너를등록 ( 예 : addactionlistener()) 한다. 이벤트관련패키지 java.awt.event javax.swing.event

7. 이벤트프로그래밍 4 이벤트-드리븐 (event-driven) 프로그래밍 마우스버튼클릭, 더블클릭, 마우스이동등의모든사용자액션에대해응답하는형태로작동하도록하는프로그래밍 윈도우환경에서는대부분의응용프로그램이이벤트-드리븐프로그래밍방식으로작성된다. 일반프로그램 이벤트 - 드리븐프로그램

7.1 AWT 이벤트 5 고수준이벤트 여러개의작은이벤트들로이루어져있는의미있는것 예 : 마우스를클릭한다 저수준이벤트 작은작업들로세밀하게표현되는것 예 : 마우스클릭 --> 마우스를이동한다., 마우스를누른다., 마우스를띤다. 버튼에서클릭에따른이벤트처리과정 1. 버튼객체를생성한다. Button ok = new Button("OK"); 2. 버튼을클릭하는경우에수행할작업을버튼에등록한다. 버튼에등록할때 addactionlistener() 라는메소드를이용한다. ok.addactionlistener(...)

7.1 AWT 이벤트 6 예제 ) 버튼에서액션이벤트를처리 ActionListener 인터페이스를임플리멘츠해야한다. ActionListener 인터페이스를임플리멘츠하는클래스는 actionperformed() 메소드를만들어야한다. 버튼에서클릭이발생하면아래그림과같이등록된이벤트핸들러클래스의 actionperformed() 메소드가호출되어실행

7.1 AWT 이벤트 7 버튼에수행내용등록 addactionlistener(..) 메소드이용. 이메소드의매개변수는버튼클릭에의해작업할내용을갖는객체임. 버튼을클릭하면 actionperformed(action ) 가수행되도록약속되어있음. 객체에 actionperfomed(action) 메소드가있음을보장하기위해 ActionListener인터페이스를임프리멘츠함. Button ok = new Button("OK"); ok.addactionlistener( ); O K 등록 class......... implements ActionListener public void actionperformed (Action e) {... }

이벤트프로그램작성 8 예제 : Button.java ( 신 7.3.1) 2 import java.awt.event.*; 5 public class Button extends JFrame implements ActionListener { 11 ok = new JButton("OK"); 12 ok.addactionlistener(this); 20 public void actionperformed(action e) { 21 Object o = e.getsource(); 22 if(o == ok) { 23 System.out.println("OK");

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

이벤트클래스들 10 Object 이벤트클래스의가장상위클래스 Action 버튼클릭, 텍스트필드에서엔터입력, 리스트에서더블클릭, 메뉴아이템선택 Item 체크박스, 라디오, 리스트, 콤보박스 Mouse, MouseWheel 마우스작동 Key 키보드입력

이벤트처리 11 이벤트처리절차

7.1 AWT 이벤트 12 AWT 컴포넌트에서발생할수있는이벤트들 AWT 컴포넌트 action adjus tment Button Canvas Checkbox Checkbox MenuItem Choice Componen t Container Dialog Frame Label comp onent cont ainer 발생할수있는이벤트 focu s ite m ke y mous e mouse motio n 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 text window X X X X X X X X X X X X X X X X X X X

7.1 AWT 이벤트 13 AWT 컴포넌트 List MenuItem Panel Scrollbar ScrollPane TextArea TextCompo nent TextField Window nt 발생할수있는이벤트 actio adjust com cont focu ite key mous n ment pone ainer s m e X X X X X X X mouse text window motio 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 n

7.1 AWT 이벤트 14 각이벤트에따라등록해야하는인터페이스들이있다. 인터페이스이름은 이벤트이름 +Listener 의형태이다. 인테페이스에선언된메소드의목록 Listener Interface Adapter Class Methods ActionListener none actionperformed(action) AdjustmentListener none adjustmentvaluechanged(adjustmenteven ComponentListener ComponentAdapt t) componenthidden(component) er componentmoved(component) componentresized(component) componentshown(component) ContainerListener ContainerAdapter componentadded(container) componentremoved(container)

7.1 AWT 이벤트 15 Listener Interface Adapter Class Methods FocusListener FocusAdapter focusgained(focus) focuslost(focus) ItemListener none itemstatechanged(item) KeyListener KeyAdapter keypressed(key) keyreleased(key) keytyped(key) MouseListener MouseAdapter mouseclicked(mouse) mouseentered(mouse) mouseexited(mouse) mousepressed(mouse) mousereleased(mouse) MouseMotionListener MouseMotionAdapter mousedragged(mouse) mousemoved(mouse)

7.1 AWT 이벤트 16 Listener Interface Adapter Class Methods TextListener none textvaluechanged(text) WindowListener WindowAdapter windowactivated(window) windowclosed(window) windowclosing(window) windowdeactivated(window) windowdeiconified(window) windowiconified(window) windowopened(window)

7.2 이벤트처리 17 7.2.1 기본적인클래스들 1. Object 클래스 java.util 패키지의 Object 는모든이벤트클래스들에서가장상위에있는클래스이다. 따라서모든이벤트클래스들은직접혹은간접적으로이클래스로부터상속받고있다. 생성자와메소드 Object(Object source) - Object 타입의객체를생성. Object getsource() - 이벤트가발생한객체를리턴. String tostring() - 이벤트를문자열로리턴.

7.2 이벤트처리 18 2. AWT 클래스 AWT 이벤트를위한클래스중에서가장상위클래스, Object 로부터상속받음. AWT 는 AWT 이벤트를표현하기위해 id 속성을가진다 생성자와메소드 AWT( event) - JDK1.0 에서사용되던이벤트 () 타입의객체를이용해서 AWT 를생성. AWT(Object source, int id) - 이벤트가발생한곳 (source) 와이벤트타입 (id) 를이용해서 AWT 를생성. int getid() - 이벤트타입을리턴. String paramstring() - 이벤트의상태를문자열로리턴.

7.2 이벤트처리 19 7.2.2 Action 컴포넌트에서정의한고수준의이벤트가발생한것을표현하기위한클래스 액션이벤트가발생하는경우 버튼을클릭할때 텍스트필드에서엔터를칠때 리스트에서더블클릭할때 메뉴아이템을선택할때 ( 클릭할때 ) Action 생성자 Action(Object source, int id, String command) - ActionEvnet 를생성한다. Action(Object source, int id, String command, int modifiers) - 모디파이어키가눌려진 Action 를생성한다.

7.2 이벤트처리 20 Action는다음과같은메소드들을가진다. String getactioncommand() - 액션과관련된명령어문자열을리턴한다. int getmodifiers() - 액션이발생할때눌려진모디파이어키를리턴한다. 모디파이어키는쉬프트, 알트, 컨트롤키를의미한다. 1. 버튼 버튼을마우스로클릭하는경우에 Action가발생. 버튼의액션이벤트를처리하기위해서는버튼을생성한후에 addactionlistener() 메소드를호출해서이벤트처리루틴을등록해주어야함. ActionListener 인터페이스에는 actionperformed() 가선언되어있으므로임플리멘츠하는클래스는 actionperformed() 를정의해주어야함.

7.2 이벤트처리 21 예제 : Button.java 1 import java.awt.*; 2 import java.awt.event.*; 3 4 public class Button extends Frame implements ActionListener { 5 Button exit, print; 6 7 public Button() { 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);

7.2 이벤트처리 22 19 setvisible(true); 20 } 21 22 public void actionperformed(action 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 Button be = new Button(); 34 } 35 }

7.2 이벤트처리 23 2. 텍스트필드 텍스트필드에서엔터키를입력하는경우에 Action 가발생한다. 예제 : TextField.java 1 import java.awt.*; 2 import java.awt.event.*; 3 4 public class TextField extends Frame implements ActionListener { 5 TextField one, two; 6 Button exit; 7 8 public TextField() { ` 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);

7.2 이벤트처리 24 17 add("north", one); 18 add("south", two); 19 add("east", exit);.. 24 public void actionperformed(action 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);

7.2 이벤트처리 25 7.2.3 Item Item 는체크박스, 라디오버튼, 선택, 리스트에서아이템이 선택되거나선택이해제되는경우에발생하는고수준이벤트이다. Item 의멤버필드 static int DESELECTED - 선택이해제된것 static int ITEM_STATE_CHANGED - 아이템의상태가변경됨 static int SELECTED - 아이템이선택된것 Item 의생성자 Item(ItemSelectable source, int id, Object item, int statechange) - ItemEvnet 를생성한다

7.2 이벤트처리 26 Item의메소드 Object getitem() - 이벤트에의해영향받는아이템을리턴한다. ItemSelectable getitemselectable() - 이벤트의발생지를리턴한다. int getstatechange() - 변경된상태를리턴한다. Item 를처리하기위해서는 ItemListener 인터페이스를 임플리멘츠한이벤트핸들러를 additemlistener() 메소드를이용해서 등록해야한다. ItemListener 인터페이스는 itemstatechanged() 메소드를가지고있다. void itemstatechanged(item e) - 아이템이선택되거나선택이해제될때자동적으로호출된다.

7.2 이벤트처리 27 1. 체크박스 체크박스를선택하거나선택을해제할때 Item가발생한다. 예제 : Check.java.. 4 public class Check extends Frame 5 implements ItemListener, ActionListener {. 11 public Check() {. 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);

7.2 이벤트처리 28 24 bottom.add(female = new Checkbox(" 여자 ", cbg, false)); 25 female.additemlistener(this);.. 44 public void itemstatechanged(item 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() == Item.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 }..

7.2 이벤트처리 29 2. 선택버튼 (Choice) 선택버튼의아이템을선택하는경우에 Item 가발생한다. 3. 라디오버튼 (Radio) 라디오버튼은체크박스의특수한형태이다. 라디오버튼을 선택하는경우에 Item 가발생한다. 4. 리스트 (List) 리스트의아이템을더블클릭하는경우에는 Action 가, 한번클릭하는경우에는 Item 가발생한다.

7.2 이벤트처리 30 예제 : ChoiceList.java 4 public class ChoiceList extends Frame 5 implements ActionListener, ItemListener { 11 public ChoiceList() { 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");

7.2 이벤트처리 31 51 public void itemstatechanged(item 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 }..

7.2 이벤트처리 32 7.2.4 Window 윈도우의상태가변경될때발생하는저수준의이벤트. 윈도우가열리는경우, 닫히는경우, 활성화되는경우, 비활상화되는경우, 아이콘이되는경우, 아이콘에서원도우로다시변경되는경우에발생. 윈도우, 다이얼로그, 프레임에서발생할수있다. WindowEvnet 의생성자와메소드 Window(Window source, int id) - Window 를생성한다. Window getwindow() - 이벤트가발생한윈도우를리턴한다. WindowListener 인터페이스의 7 개메소드를모두정의할필요가 없을경우, WindowAdapter 클래스를상속하는클래스를정의하고필요한 메소드만오버라이드하여사용하는것이가능.

7.2 이벤트처리 33 예제 : Frame.java.. 4 public class Frame extends Frame { 5 Label msg; 6 7 public Frame() {.. 12 addwindowlistener(new WindowHandler()); 13 setsize(300, 200); 14 setvisible(true); 15 } 16 17 public class WindowHandler extends WindowAdapter { 18 public void windowclosing(window e) { 19 Window w = e.getwindow(); 20 w.setvisible(false); 21 w.dispose(); 22 System.exit(0); 23 }..

7.2 이벤트처리 34 7.2.5 Mouse 마우스관련이벤트는마우스클릭과마우스이동에관한 2 가지형태로분류할수있다. 마우스클릭관련이벤트는MouseListener 인터페이스에서관리 마우스이동관련이벤트는MouseMotion Listener 인터페이스에서관리 각각 MouseAdapter 와 MouseMotionAdapter 클래스들을제공 예제 : DrawRect.java 6 int startx, starty, w, h; 7 8 public void init() { 9 addmouselistener(new MouseHandler()); 10 addmousemotionlistener(new MouseMotionHandler());

7.2 이벤트처리 21 public class MouseMotionHandler extends MouseMotionAdapter { 22 public void mousedragged(mouse e) { 23 w = Math.abs(startX - e.getx()); 24 h = Math.abs(startY - e.gety()); 25 repaint(); 29 public class MouseHandler extends MouseAdapter { 30 public void mousepressed(mouse e) { 31 startx = e.getx(); 32 starty = e.gety(); 33 } 34 35 public void mousereleased(mouse e) { 36 w = Math.abs(startX - e.getx()); 37 h = Math.abs(startY - e.gety()); 38 repaint(); 35

7.2 이벤트처리 36 7.2.6 Key 1. Input Input는 Key와 Mouse의부모클래스로서, 모든컴포넌트의입력을위한이벤트의가장상위클래스이다. Input는이벤트가발생된컴포넌트에서기본적으로처리되기전에리스너로먼저전달된다. 따라서, 필요한경우에는리스너 (listener) 부분에서먼저이벤트를처리하고, 이벤트가발생한컴포넌트가디폴트작업하지못하도록할수있다. Input의메소드 void consume() - 이벤트가 발생한 컴포넌트에서 디폴트로 작업하지안도록이벤트를소비한다. int getmodifiers() - 모디파이어플래그값을리턴한다.

7.2 이벤트처리 37 long getwhen() - 이벤트가 발생한시간의타임스탬프값을 리턴한다. boolean isaltdown() - ALT 키가눌려졌는지알아본다. boolean isconsumed() - 이벤트가소비되었는지여부를알려준다. boolean iscontroldown() - Control 키가 눌려졌는지 여부를 리턴한다. boolean ismetadown() - Meta 키가눌려졌는지여부를리턴한다. boolean isshiftdown() - Shift 키가눌려졌는지여부를리턴한다.

7.2 이벤트처리 38 2. Key Key 는 Input 클래스로부터상속받는다. Key 는사용자가키보드의키를누르거나, 띠거나, 문자를입력할 때발생한다. Key 를처리하기위한 KeyListener 의메소드들 void keypressed(key e) - 키보드를누르는순간에호출되는메소드이다. 또한키를계속누르고있는경우에도이메소드가계속호출된다. void keyreleased(key e) - 눌려진키보드를띠는순간에호출되는메소드이다. void keytyped(key e) - 키보드를눌렀다띰으로서문자를입력할때호출되는고차원메소드이다. Key의메소드들 char getkeychar() - 입력된문자를리턴한다. int getkeycode() - 입력된키의정수형키코드값을리턴한다.

7.2 이벤트처리 39 예제 : 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);

7.2 이벤트처리 40 24 public void keypressed(key 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 void keytyped(key e) { } 33 public void keyreleased(key e) { } 34 35 public void actionperformed(action e) { 36 setvisible(false); 37 dispose(); 38 System.exit(0); 39 }..

7.2 이벤트처리 41 7.2.7 Text Text 는텍스트컴포넌트 ( 텍스트필드, 텍스트영역 ) 에서텍스트 내용이변경되는경우에발생한다. Text 를처리하는 TextListener 인터페이스의메소드 void textvaluechanged(text e) - 텍스트내용이변경되는경우에호출된다. 예제 : TextTest.java 1 import java.awt.*; 2 import java.awt.event.*; 3 4 public class TextTest extends Frame implements 5 TextListener, ActionListener { 6 7 TextArea edit; 8 Button exit;

7.2 이벤트처리 42 10 public TextTest() { 11 super(" 텍스트이벤트 "); 12 edit = new TextArea(); 13 edit.addtextlistener(this); 14 exit = new Button("Exit"); 15 exit.addactionlistener(this); 23 public void actionperformed(action e) { 24 setvisible(false); 25 dispose(); 26 System.exit(0); 27 } 28 29 public void textvaluechanged(text e) { 30 System.out.println(" 텍스트내용이변경되었습니다."); 31 }

7.2 이벤트처리 43 7.2.8 기타 1. 스크롤바의이벤트 스크롤바에서는 Adjustment가발생할수있다. 이이벤트는 AdjustmentListener 인터페이스를이용해서처리할수있다. AdjustmentListener 인터페이스의메소드 void adjustmentvaluechanged(adjustment e) - 값이변경되는경우에호출된다. Adjustment 클래스의중요한메소드 int getvalue() - 현재값을리턴한다. 2. 컴포넌트이벤트 Component 는컴포넌트가이동하거나, 크기가변경되거나, 혹은 화면에보이거나안보일때발생되는저수준의이벤트이다.

7.2 이벤트처리 44 Component 를처리하는 ComponentListener 인터페이스의메소드 void componenthidden(component e) - 컴포넌트가화면에서안보이게될때호출된다. void componentmoved(component e) - 컴포넌트의위치가변경될때호출된다. void componentresized(component e) - 컴포넌트의크기가변경될때호출된다. void componentshown(component e) - 컴포넌트가화면에보이게될때호출된다.

7.2 이벤트처리 45 예제 : 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 }

7.2 이벤트처리 46 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 }

7.2 이벤트처리 47 예제 : 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);

7.2 이벤트처리 48 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(adjustment e) { 38 canvas.tx = bar.getvalue(); 39 canvas.repaint(); 40 } 41 42 public void actionperformed(action e) { 43 setvisible(false); 44 dispose(); 45 System.exit(0); 46 }

7.2 이벤트처리 49 48 public void componentresized(component e) { 49 bar.setmaximum(canvas.getimagewidth() - 50 canvas.getsize().width); 51 } 52 53 public void componentmoved(component e) { } 54 public void componentshown(component e) { } 55 public void componenthidden(component e) { }.

7.3 스윙이벤트 50 스윙은기본적으로 AWT의이벤트를그대로사용할수있으며, 별도의컴포넌트를위해서는 javax.swing.event 패키지에새로운이벤트들을정의하고있다. 스윙컴포넌트에서발생할수있는이벤트들 Component Listener 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

7.3 스윙이벤트 51 Component Listener action caret change document, undoable edit item list selection window frame X internal frame list X menu menu item X X X option pane password filed X X X popupmenu progress bar X radio button X X X slider X

7.3 스윙이벤트 52 Component Listener action caret change document, item list window undoable edit selection tabbed pane X table X text area X X text field X X X text pane X X toggle button X X X tree Viewport(used by X scrollpane)

7.3 스윙이벤트 53 스윙컴포넌트이벤트에대한리스너인터페이스들과메소드들 Listener Interface Adapter Class Listener Methods ActionListener none actionperformed(action) AncestorListener CaretListener none none ancestoradded(ancestor) ancestormoved(ancestor) ancestorremoved(ancestor ) caretupdate(caret) CellEditorListener none editingstopped(change) editingcanceled(change) ChangeListener none statechanged(change) ComponentListener ComponentAdapter componenthidden(componentev ent) componentmoved(componenteve nt) componentresized(componentev ContainerListener ContainerAdapter componentadded(container ent) ) componentshown(componenteve componentremoved(containerev nt)

7.3 스윙이벤트 54 Listener Interface Adapter Class Listener Methods DocumentListener none changedupdate(document) insertupdate(document) removeupdate(document) FocusListener FocusAdapter focusgained(focus) focuslost(focus) HyperlinkListener none hyperlinkupdate(hyperlink) InternalFrameListen er InternalFrameAdapt er internalframeactivated(internalframe) internalframeclosed(internalframe) internalframeclosing(internalframe) internalframedeactivated(internalframeeven t) internalframedeiconified(internalframe ) internalframeiconified(internalframe) ItemListener none itemstatechanged(item) internalframeopened(internalframe) KeyListener KeyAdapter keypressed(key) keyreleased(key) keytyped(key)

7.3 스윙이벤트 55 Listener Interface Adapter Class Listener Methods ListDataListener none contentschanged(listdata) intervaladded(listdata) intervalremoved(listdata) ListSelectionListener none valuechanged(listselection) MenuDragMouseList ener none menudragmousedragged(menudragmouseeve nt) menudragmouseentered(menudragmouseeven t) menudragmouseexited(menudragmouse) menudragmousereleased(menudragmouseev menukeyreleased(menukey) ent) menukeytyped(menukey) MenuKeyListener none menukeypressed(menukey) MenuListener none menucanceled(menu) menudeselected(menu) menuselected(menu)

7.3 스윙이벤트 56 Listener Interface Adapter Class Listener Methods MouseInputListener MouseInputAdapt er mouseclicked(mouse) mouseentered(mouse) mouseexited(mouse) mousepressed(mouse) mousereleased(mouse) mousedragged(mouse) mousemoved(mouse) PopupMenuListener popupmenucanceled(popupmenu) popupmenuwillbecomeinvisible(popupmenueve nt) MouseListener MouseAdapter mouseclicked(mouse) popupmenuwillbecomevisible(popupmenueven t) mouseentered(mouse) mouseexited(mouse) mousepressed(mouse) mousereleased(mouse) MouseMotionListene r MouseMotionAda pter mousedragged(mouse) mousemoved(mouse)

7.3 스윙이벤트 57 Listener Interface Adapter Class Listener Methods TableColumnModelLi stener none columnadded(tablecolumnmodel) columnmoved(tablecolumnmodel) columnremoved(tablecolumnmodel) columnmarginchanged(change) columnselectionchanged(listselection) TableModelListener none tablechanged(tablemodel) TreeExpansionListen er none treecollapsed(treeexpansion) treeexpanded(treeexpansion) TreeModelListener none treenodeschanged(treemodel) treenodesinserted(treemodel) treenodesremoved(treemodel) treestructurechanged(treemodel) TreeSelectionListene r none valuechanged(treeselection)

7.3 스윙이벤트 58 Listener Interface Adapter Class Listener Methods TreeWillExpandListener none treewillcollapse(treeexpansion) treewillexpand(treeexpansion) UndoableEditListener none undoableedithappened(undoableedit) WindowListener WindowAdapter windowactivated(window) windowclosed(window) windowclosing(window) windowdeactivated(window) windowdeiconified(window) windowiconified(window) windowopened(window)

7.3 스윙이벤트 59 대부분의스윙컴포넌트들은 AWT와동일하거나혹은유사한방법으로이벤트처리를할수있다. 예를들어 JButton은 AWT의 Button과동일하게 Action를이용해서이벤트처리를한다. 예제 : AddTableRow.java (JButton 에서 Action 를사용하는예제 ) 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

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(action e) { 39 String data [] = "", "" ; 40 model.addrow(data); 41 }

7.3 스윙이벤트 61 TreeSelection JTree 에서노드를선택하는순간에 TreeSelection 가발생한다. 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");

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

7.3 스윙이벤트 63 34 tree.addtreeselectionlistener(new TreeSelectionListener() { 35 public void valuechanged(treeselection 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);.

7.3 스윙이벤트 64 TableModel TableModel 이벤트는테이블의값이변경되는경우에발생한다. TableModelListener 인터페이스는 tablechanged() 라는메소드를가지고있으며, TableModel 에이벤트리스너를등록한다. 예제 : TableDemo.java 1 import java.awt.*; 2 import javax.swing.*; 3 import javax.swing.event.*; 4 import javax.swing.table.*; 5 6 public class TableDemo extends JFrame{ 7 8 public TableDemo() 9 super(" 테이블테스트 "); 10 String fieldname[] = { 11 "<html> 이름 <br> 학기순 </html>", 12 " 전화번호 ", 13 "E-Mail" 14 }; 15

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

7.4 이벤트프로그래밍응용 66 GEditor 이벤트를이용해서그래픽에디터를만드는예제프로그램 버튼, 라벨, 텍스트영역, 텍스트필드모양을그려주고자바코드로변환해주는그래픽에디터 GEditor 에서는각그림들의이동과크기변경이가능

7.4 이벤트프로그래밍응용 67 GEditor 에서그림을그리고, 메뉴에서 Code Gen 을선택하면그려진 모양에해당되는자바코드가생성됨. 다음그림은생성된자바코드를컴파일해서실행시킨결과

7.4 이벤트프로그래밍응용 68 GEDrawable 인터페이스 그래픽에디터에서그림을핸들링하기위한기본적인메소드들을선언 GEDrawableRectangle 클래스 그래픽에디터에서가장많이사용될수있는그림클래스 Bbutton, Blabel, BtextArea, BtextField 클래스 버튼, 라벨, 텍스트영역, 텍스트필드모양을그려주기위한클래스 GEditorCanvas 클래스 그림을그려주는캔버스영역 GEditor 클래스 각클래스를모아작성한그래픽에디터 GEditor 예제프로그램은간단하지만, 그래픽에디터나인터페이스빌더 등의응용분야에적용될수있을것이다.

69 GEDrawable: interface methods GEDrawableRectangle Implement : move, resize Inheritance from GEDrawableRectangle Link two other classes Blabel BtextField Bbutton BtextArea Calls via Handler Bvscroll class Bhscroll class Geditor - Menu Handle GEditorVanvas - Canvas Handle Mouse Handler MouseMotionListner