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

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

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

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

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63230C0E520BDBAC0AE20C4C4C6F7B3CDC6AE203128B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

11장.key

10장.key

9장.key

<4D F736F F F696E74202D20C1A63138C0E520C0CCBAA5C6AE20C3B3B8AE28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - 04-UDP Programming.ppt

PowerPoint Presentation

PowerPoint 프레젠테이션

No Slide Title

Microsoft PowerPoint - 14주차 강의자료

Java Programing Environment

강의자료

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

09-interface.key

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

JMF3_심빈구.PDF

Microsoft PowerPoint - 06-Chapter09-Event.ppt

비긴쿡-자바 00앞부속

OOP 소개

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

ch09

어댑터뷰

자바로

13ÀåÃß°¡ºÐ

PowerPoint 프레젠테이션

10-Java Applet

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 08.다형성

쉽게 풀어쓴 C 프로그래밍

Chap12

rmi_박준용_final.PDF

鍮뚮┰硫붾돱??李⑤낯

01-OOPConcepts(2).PDF

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

PowerPoint Presentation

05-class.key

슬라이드 1

제11장 프로세스와 쓰레드

연습문제이론홀수정답

운동시뮬레이션 강의 소개

No Slide Title

5장.key

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

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

03장

PowerPoint Presentation

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

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

PowerPoint 프레젠테이션

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

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - 2강

MVVM 패턴의 이해

12-file.key

JUNIT 실습및발표

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

교육자료

PowerPoint Presentation

오버라이딩 (Overriding)

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

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

( )부록

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

歯NetworkKawuiBawuiBo.PDF

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

Spring Boot/JDBC JdbcTemplate/CRUD 예제

슬라이드 1

2 단계 : 추상화 class 오리 { class 청둥오리 extends 오리 { class 물오리 extends 오리 { 청둥오리 mallardduck = new 청둥오리 (); 물오리 redheadduck = new 물오리 (); mallardduck.swim();

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

그래픽 chapter.1 스윙컴포넌트그리기 컴포넌트는자신의모양을스스로그린다 X-window, MFC, C# GUI, Android 등 GUI 플랫폼에서 GUI 컴포넌트는스스로자신의모양을그린다. 자바의스윙도예외는아니다. JButton은버튼모양을그리는코드를내장하고, JCo

쉽게 풀어쓴 C 프로그래밍

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

Web Service Computing

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

Network Programming

02 C h a p t e r Java

JMF2_심빈구.PDF

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

8장.그래픽 프로그래밍

Microsoft PowerPoint - Java-03.pptx

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

fundamentalOfCommandPattern_calmglow_pattern_jstorm_1.0_f…

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

C++ Programming

[ 프로젝트이름 ] : Project_Car [ 프로젝트를만든목적 ] : 임의의자동차판매소가있다고가정하고, 고객이원하는자동차의각부분을 Java 를이용하여객 체로생성하고, 그것을제어하는메소드를이용하여자동차객체를생성하는것이목표이다. [ 프로젝트패키지와클래스의내용설명 ] [

PowerPoint Presentation

UI TASK & KEY EVENT

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

PowerPoint Presentation

Contents. 1. PMD ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 2. Metrics ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 3. FindBugs ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ 4. ㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍㆍ

신림프로그래머_클린코드.key

4장.문장

Transcription:

제8장 MVC Model

8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로 ) 표현하는것 Controller: 사용자가 View를통해입력을하면 Model을변경해주는것 MVC Model 2

8.1 MVC 모델 (2/7) MVC 모델 모델, 뷰, 컨트롤러를분리한 MVC 모델은상당히유용하고강력한프로그래밍모델이기때문에사용자인터페이스개발에많이적용 스윙을개발하면서 MVC 모델을그대로적용하기에는실제적인어려움이많아서 MVC를변형한모델을개발. 스윙에서는 MVC의뷰와컨트롤러를합쳐서 "UI delegate" 라는객체를정의. MVC 모델 내부상태, 자료관리 UI delegate 모양결정, 이벤트 MVC Model 3

8.1 MVC 모델 (3/7) 스윙의모든 GUI 컴포넌트들은 UI delegate 부분과 Model 부분으로구성 UI delegate 부분은 GUI 컴포넌트의모양과사용자의입력에따른이벤트를처리 모델의역할 내부상태를알아본다. 내부상태를관리한다. 이벤트리스너를추가 / 삭제한다. 이벤트를발생시킨다. UI delegate 의역할 GUI 컴포넌트를그려준다. GUI 컴포넌트의위치정보를리턴한다. AWT 이벤트를처리한다. MVC Model 4

8.1 MVC 모델 (4/7) 각컴포넌트의모델인터페이스와모델타입 (I) MVC Model 5

8.1 MVC 모델 (5/7) 각컴포넌트의모델인터페이스와모델타입 (II) MVC Model 6

예제 : CountButtonModel.java 8.1 MVC 모델 (6/7) 4 public class CountButtonModel extends DefaultButtonModel { 5 private int count; 6 private JButton btn; 7 8 public CountButtonModel(JButton btn) { 9 this.btn = btn; 10 btn.setmodel(this); 11 } 13 public void setpressed(boolean b) { 14 if(b) { 15 count = ++count % 4; 16 switch(count) { 17 case 0: 18 btn.setbackground(color.lightgray); MVC Model 7

8.1 MVC 모델 (7/7) 예제 : ButtonModelTest.java 8 ImageIcon rai = new ImageIcon("rai.gif"); 9 ok = new JButton("OK", rai); 10 ok.setrollovericon(rai); 11 ok.setpressedicon(rai); 12 CountButtonModel model = new CountButtonModel(ok); 13 14 getcontentpane().add("south", ok); 15 setdefaultcloseoperation(jframe.exit_on_close); 16 setsize(400, 300); 17 setvisible(true); MVC Model 8

8.2 MVC 모델예제 (1/12) 새로운컴포넌트 (ShipComponent) 만들기 MVC Model 9

8.2 MVC 모델예제 (2/12) MVCtest.java ShipModel.java ShipComponent.java ShipComponentUI.java DefaultShipModel.java ImgShipComponent.java MVC Model 10

8.2 MVC 모델예제 (3/12) 예제 : ShipComponent.java 5 public class ShipComponent extends JComponent { 6 private ShipModel model; 7 private ShipComponentUI ui; 8 private ActionListener actionlistener; 9 private boolean pressed; 10 11 public ShipComponent(String s, String d) { 12 enableevents(awtevent.mouse_event_mask); 13 model = new DefaultShipModel(s, d); 14 setui(new ShipComponentUI()); 15 } MVC Model 11

8.2 MVC 모델예제 (4/12) 예제 : ShipComponent.java( 계속 ) 22 public void paint(graphics g) { 23 ui.paint(this, g); 24 } 35 public void setui(shipcomponentui ui) { 36 if(ui!= null && this.ui!= null) { 37 this.ui.uninstallui(this); 38 } 40 if(ui!= null) { 41 this.ui = ui; 42 this.ui.installui(this); 43 } 44 updateshipcomponent(); MVC Model 12

8.2 MVC 모델예제 (5/12) 예제 : ShipComponent.java( 계속 ) 51 public Dimension getpreferredsize() { 52 return ui.getpreferredsize(this); 53 } 67 public boolean ispressed() { 68 return pressed; 69 } 70 71 public void addactionlistener(actionlistener listener) { 72 actionlistener = 73 AWTEventMulticaster.add(actionListener, listener); 74 } MVC Model 13

8.2 MVC 모델예제 (6/12) 예제 : ShipComponent.java( 계속 ) 81 public void processmouseevent(mouseevent e) { 82 Graphics g; 83 switch(e.getid()) { 88 case MouseEvent.MOUSE_RELEASED: 89 if(actionlistener!= null) { 90 actionlistener.actionperformed(new ActionEvent(this, 91 ActionEvent.ACTION_PERFORMED, model.getdata())); 92 } 93 if(pressed == true) { 94 pressed = false; 95 repaint(); MVC Model 14

8.2 MVC 모델예제 (7/12) 예제 : ShipComponentUI.java 5 public class ShipComponentUI extends ComponentUI { 6 private Dimension dim; 32 public void paint(shipcomponent ship, Graphics g) { 37 int xs[] = {2, d.width-2, 2*d.width/3, d.width/3, 2}; 38 int ys[] = { 2, 2, d.height -2, d.height - 2, 2}; 39 Color fg = g.getcolor(); 40 g.setcolor(new Color(200, 200, 200)); 41 g.fillpolygon(xs, ys, xs.length); 42 g.setcolor(fg); 43 if(ship.ispressed()) { 44 g.drawpolygon(xs, ys, xs.length); MVC Model 15

8.2 MVC 모델예제 (8/12) 예제 : ImgShipComponentUI.java 3 public class ImgShipComponentUI extends ShipComponentUI { 4 private Image img; 37 public void paint(shipcomponent ship, Graphics g) { 38 Dimension d = ship.getsize(); 39 ShipModel model = ship.getmodel(); 40 ship.settooltiptext(model.getdata()); 41 if(img!= null) { 42 int x = (d.width - img.getwidth(ship))/2; 43 int y = (d.height - img.getheight(ship))/2; 44 g.drawimage(img, x, y, ship); 45 } 46 if(ship.ispressed()) { 47 g.drawrect(1,1,d.width-2, d.height-2); MVC Model 16

8.2 MVC 모델예제 (9/12) 예제 : ShipModel.java 1 public interface ShipModel { 2 public String getdata(); 3 } MVC Model 17

8.2 MVC 모델예제 (10/12) 예제 : DefaultShipModel.java 1 public class DefaultShipModel implements ShipModel { 2 private String dest; 3 private String start; 4 5 public DefaultShipModel(String s, String d) { 6 start = s; 7 dest = d; 8 } 9 10 public String getdata() { 11 return start + " -> " + dest; MVC Model 18

8.2 MVC 모델예제 (11/12) 예제 : MVCTest.java 4 public class MVCTest extends JFrame implements ActionListener { 6 private ShipComponent tola, totokyo; 12 tola = new ShipComponent("Seoul", "LA"); 13 tola.addactionlistener(this); 14 map.add(tola); 19 totokyo = new ShipComponent("Seoul", "Tokyo"); 20 totokyo.addactionlistener(this); 21 totokyo.setui(new ImgShipComponentUI(this, "ship.jpg")); 22 map.add(totokyo); 23 totokyo.setlocation(250, 130); 24 totokyo.setsize(totokyo.getpreferredsize()); MVC Model 19

8.2 MVC 모델예제 (12/12) 결과 MVC Model 20