No Slide Title

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

Microsoft PowerPoint - 04-UDP Programming.ppt

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

강의자료

PowerPoint Presentation

Java Programing Environment

<4D F736F F F696E74202D20C1A63230C0E520BDBAC0AE20C4C4C6F7B3CDC6AE203128B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63138C0E520C0CCBAA5C6AE20C3B3B8AE28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

9장.key

11장.key

No Slide Title

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

10장.key

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

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

Microsoft PowerPoint - 14주차 강의자료

Microsoft PowerPoint - Java-03.pptx

슬라이드 1

슬라이드 1

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

PowerPoint Presentation

PowerPoint Presentation

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

슬라이드 1

Microsoft PowerPoint - 06-Chapter09-Event.ppt

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

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

PowerPoint Presentation

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

Microsoft PowerPoint - Java7.pptx

Cluster management software

PowerPoint Presentation

오버라이딩 (Overriding)

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

Cluster management software

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

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

JAVA PROGRAMMING 실습 08.다형성

운동시뮬레이션 강의 소개

슬라이드 1

Design Issues

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Network Programming

05-class.key

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

PowerPoint Presentation

09-interface.key

8장.그래픽 프로그래밍

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Microsoft PowerPoint 장강의노트.ppt

ch09

Microsoft Word - java18-1-final-answer.doc

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

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

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

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 05. 객체의 활용

Spring Boot/JDBC JdbcTemplate/CRUD 예제

제11장 프로세스와 쓰레드

No Slide Title

PowerPoint Template

JAVA PROGRAMMING 실습 09. 예외처리

PowerPoint 프레젠테이션

PowerPoint Presentation

쉽게

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

쉽게 풀어쓴 C 프로그래밍

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

Microsoft PowerPoint - java2-lecture6.ppt [호환 모드]

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

11-GUI.key

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

PowerPoint 프레젠테이션

Microsoft Word - java19-1-final-answer.doc

Microsoft PowerPoint - CSharp-10-예외처리

예제 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

Microsoft PowerPoint - 03-TCP Programming.ppt

JMF3_심빈구.PDF

PowerPoint 프레젠테이션

C++ Programming

<4D F736F F F696E74202D205B4A415641C7C1B7CEB1D7B7A1B9D65D3130C0E5C0CCBAA5C6AEC3B3B8AE>

PowerPoint 프레젠테이션

웹연동 } 웹 (Web) 환경에서데이터베이스시스템을연동하는방법은다음과같다 } Server Client 구조의통신 (2-Tier) } Server Middleware Client 구조의통신 (3-Tier) 2

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

Microsoft PowerPoint - 2강

PowerPoint Presentation

Spring Data JPA Many To Many 양방향 관계 예제

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밊

Cluster management software

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

비긴쿡-자바 00앞부속

02 C h a p t e r Java

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

Transcription:

사건처리와 GUI 프로그래밍 이충기 명지대학교컴퓨터공학과

사건 사건은우리가관심을가질지모르는어떤일이일어나는것을나타내는객체이다. 예를들면, 다음이일어날때프로그램이어떤일을수행해야하는경우에사건이발생한다 : 1. 마우스를클릭한다. 2. 단추를누른다. 3. 키보드의키를누른다. 4. 메뉴항목을선택한다. 2

사건 사건은컴포넌트에서사용자나시스템에의하여발생하는일이다. 자바는사건을나타내는많은사건클래스를제공한다. 사건소스 (Event Source) 는사건이발생되는진원지이다. 사건소스는보통컴포넌트이다. 사건리스너는사건이일어나기를기다리다가사건이발생하면대응하는객체이다. 사건리스너는대응하는컴포넌트와의밀접한관계때문에자주내부클래스로정의된다. 사건처리를위해서는사건이발생되는컴포넌트에사건리스너를등록해야한다. 3

위임형사건모델 사건소스 (Event Source) 는사건이발생한컴포넌트이다. 사건리스너 (Event Listener) 는해당사건에대한처리를한다. 사건리스너는해당사건처리를위한메소드를갖는인터페이스를구현해야한다. 사건이발생되는사건소스에사건리스너를등록해야한다. 예 : Button button = new JButton( Test ); button.addactionlistener(new ButtonHandler()); 사건처리를위임받은사건리스너에서사건을처리한다. 4

사건과리스너 컴포넌트 사건 사건리스너 컴포넌트객체는사건을발생시킬수있다 대응하는리스너객체는사건을처리한다 사건이발생할때컴포넌트는리스너의적절한메소드를호출한다. 이때사건을기술하는객체를넘겨준다. 5

사건처리구조 do { 사용자사건을기다린다사용자사건을얻는다사건에대응하여일을처리한다 } while (true); 6

그래픽사용자인터페이스설계 소프트웨어의목표는사용자가문제를해결하는것을도와주는것이다. 좋은 GUI 설계의기본아이디어 사용자를안다. 사용자의오류를최소화한다. 사용자의능력을최적화한다. 일관성을지킨다. 7

사용자알기 사용자의필요, 공통적인활동들과문제영역과정보처리의전문성수준에대해이해를해야한다. 이러한쟁점들이사용자들마다다르다는것을인식해야한다. 사용자에게프로그램의인터페이스가프로그램이라는것을기억해야한다. 8

사용자오류최소화하기 가능한사용자의실수를최소화하는 GUI 컴포넌트들을선택해야한다. 각작업에대한가장좋은컴포넌트를선택해야한다. 오류메시지들이사용자에게적절한도움을주어야한다. 9

사용자능력최적화하기 모든사용자가똑같지않다. 일부사용자들은특정 GUI 나 GUI 컴포넌트를사용하는데능숙할수있다. 어떤일을수행하기위한여러방법들을제공해야한다. - 초보자에게는자세한과정을보여주는위저드 (wizard) 를제공한다. - 전문가에게는지름길 (shortcut) 을제공한다. 도움말도있어야한다. 10

일관성유지하기 프로그램에서일관성이중요하다. - 색도비슷한유형의정보를나타내기위해일관성있게사용되어야한다. - 화면구성도한시스템의여러부분에서일관성이있어야한다. - 오류메시지들은일관성있는위치에보여져야한다. 11

대화식 GUI 프로그램작성 대화식 GUI 프로그램을작성하기위해서최소한세가지종류의객체들이필요하다 : 컴포넌트들 사건들 사건리스너들 12

GUI 프로그램작성 1. 필요한컴포넌트들과객체를만들고초기화한다. 2. 특정사건들이발생할때처리하는일을정의하는사건리스너클래스들을구현한다. 3. 관심있는사건들을발생시키는컴포넌트들과사건리스너들사이의관계를설정한다. 13

예제프로그램 1: 단추만들기 문제 : 사용자에게두개의단추들을제시한다. 한단추는 확인 으로표시되고다른단추는 취소 로표시된다. 사용자가 확인 단추를누르면 확인단추가눌러졌습니다 라는메시지를보여주고 취소 단추를누르면 취소단추가눌러졌습니다 라는메시지를보여준다. 14

예제프로그램 1: 프로그램설계 1. 필요한클래스들 ButtonDemo 클래스 : 프레임에두개의단추들과한개의레이블을만들어추가한다. ButtonListener 클래스 : 두개의단추들이일으키는사건들을처리한다. 15

ButtonDemo 클래스설계 변수들 - ok : 확인단추를나타낸다 - cancel : 취소단추를나타낸다 - outputlabel : 메시지를보여주는레이블을나타낸다 메소드 - 생성자메소드 : 화면을초기화한다 - main 메소드 : 주프레임을만들어보여준다 16

생성자메소드설계 알고리즘 1. 프레임의제목을정한다. 2. 프레임의크기를정한다. 3. 프레임의콘텐트구획의화면구성관리자를 FlowLayout 로정한다. 4. 두개의단추와레이블을프레임의콘텐트구역에추가한다. 5. 프레임의콘텐트구획의바탕색을 cyan 색으로정한다. 6. 프로그램을닫을때종료되게한다. 17

ButtonListener 클래스설계 단추가일으키는 Action 사건을처리한다. ActionListener 인터페이스의 actionperformed 메소드를구현한다. ButtonDemo 클래스의내부클래스로정의한다. - 변수들 : 없음 - 메소드 : actionperformed 18

actionperformed 메소드설계 알고리즘 1. 사건이발생한컴포넌트가 확인 단추이면레이블에 확인단추가눌러졌습니다 를보여지게한다. 아니면 취소단추가눌러졌습니다 를보여지게한다. 19

예제프로그램 1: 구현 // ButtonDemo.java: 단추들과대응하는사건리스너의사용을 // 보여준다 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ButtonDemo extends JFrame { private JButton ok; private JButton cancel; private JLabel outputlabel; // 확인단추 // 취소단추 // 메시지출력레이블 20

예제프로그램 1: 구현 ( 계속 ) public ButtonDemo ( ) { Container contentpane = getcontentpane( ); // 프레임의콘텐트페인객체를얻는다 settitle(" 단추시험 "); // 프레임의제목을정한다 setsize(200, 100); // 프레임의크기를정한다 contentpane.setlayout(new FlowLayout ()); // 프레임의콘텐트페인의화면구성관리자를정한다 // 두개의단추와레이블객체를만들어프레임의콘텐트페인에추가한다 ok = new JButton (" 확인 "); cancel = new JButton (" 취소 "); outputlabel = new JLabel (""); contentpane.add (ok); contentpane.add(cancel); contentpane.add (outputlabel); // 사건리스너객체를만들고두개의단추객체들의사건리스너로등록한다 ButtonListener listener = new ButtonListener(); ok.addactionlistener (listener); cancel.addactionlistener (listener); } contentpane.setbackground (Color.cyan); // 콘텐트페인객체의바탕색을정한다 setdefaultcloseoperation(exit_on_close); // 프로그램을닫을때종료되게한다 21

예제프로그램 1: 구현 ( 계속 ) private class ButtonListener implements ActionListener { // 단추가눌러질때레이블을갱신한다 public void actionperformed (ActionEvent event) { if (event.getsource() == ok) outputlabel.settext(" 확인단추가눌러졌습니다 "); else outputlabel.settext(" 취소단추가눌러졌습니다 "); } } // 주프레임을만들어보여준다 public static void main (String[] args) { ButtonDemo frame = new ButtonDemo (); frame.setvisible(true); } } 22

예제프로그램 1: 실행결과 23

예제프로그램 2: 환전 문제 : 사용자가원화로환전 금액을입력하면환전받는 금액을달러로알려준다. 24

예제프로그램 2: 구현설명 사용되는컴포넌트들은사용자에게환전금액을요청하는메시지와환전받는금액의의미를설명하는메시지를나타내는레이블들, 환전금액을입력하기위한텍스트필드, 환전받는금액을보여주는레이블로구성된다. GUI 는 MoneyExchangePanel 클래스에정의된다. MoneyListener 내부클래스는텍스트필드에의해발생되는 Action 사건에대한리스너를정의한다. MoneyExchangePanel 의생성자메소드는리스너객체를만들고그것을텍스트필드에추가한다. 사용자가환전금액을입력하고 Enter 키가눌러질때 Action 사건객체를발생시키고 MoneyListener 의 actionperformed 메소드를호출한다. 이메소드는환전받는금액을계산하여결과값을레이블에보여준다. 25

예제프로그램 2: 구현 import javax.swing.jframe; public class MoneyExchange { // 환전기 GUI 를만들고보여준다 public static void main (String[] args) { JFrame frame = new JFrame (" 환전기 "); frame.setdefaultcloseoperation (JFrame.EXIT_ON_CLOSE); MoneyExchangePanel panel = new MoneyExchangePanel(); } } frame.getcontentpane().add(panel); frame.pack(); frame.setvisible(true); 26

예제프로그램 2: 구현 ( 계속 ) import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MoneyExchangePanel extends JPanel { private JLabel inputlabel, outputlabel, resultlabel; private JTextField money; // 생성자메소드 : GUI를설정한다 public MoneyExchangePanel() { inputlabel = new JLabel (" 환전금액 ( 원화 ) 을입력하세요 :"); outputlabel = new JLabel (" 환전받는금액 ( 달러화 ): $"); resultlabel = new JLabel ("---"); money = new JTextField (10); money.addactionlistener (new MoneyListener()); add (inputlabel); add (money); add (outputlabel); add (resultlabel); } setpreferredsize (new Dimension(300, 80)); setbackground (Color.green); 27

예제프로그램 2: 구현 ( 계속 ) // 텍스트필드에대한사건리스너를나타낸다 private class MoneyListener implements ActionListener { // 텍스트필드에 Enter 키가눌러질때환전금액을계산한다 public void actionperformed (ActionEvent event) { int won, dollar; String text = money.gettext(); won = Integer.parseInt (text); dollar = won / 1100; } } } resultlabel.settext (Integer.toString (dollar)); 28

예제프로그램 2: 실행결과 29

요약 사건처리 그래픽사용자인터페이스설계 대화식 GUI 프로그램작성 30