제10장 자바 GUI 프로그래밍 IV

Similar documents
10-Java Applet

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Chap12

Network Programming

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

제11장 프로세스와 쓰레드

자바로

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

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

PowerPoint Presentation

PowerPoint Presentation

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

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

PowerPoint Presentation

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

Microsoft PowerPoint - 04-UDP Programming.ppt

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

쉽게 풀어쓴 C 프로그래밍

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

8장.그래픽 프로그래밍

PowerPoint Presentation

PowerPoint Template

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

쉽게 풀어쓴 C 프로그래밍

01-OOPConcepts(2).PDF

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

05-class.key

슬라이드 1

JMF3_심빈구.PDF

02 C h a p t e r Java

Microsoft PowerPoint - Java7.pptx

PowerPoint Presentation

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

JAVA PROGRAMMING 실습 09. 예외처리

rmi_박준용_final.PDF

Microsoft PowerPoint - 2강

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

JUNIT 실습및발표

PowerPoint Template

PowerPoint Presentation

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

쉽게 풀어쓴 C 프로그래밍

JavaPrintingModel2_JunoYoon.PDF

MasoJava4_Dongbin.PDF

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

PowerPoint 프레젠테이션

C++ Programming

9장.key

5장.key

쉽게 풀어쓴 C 프로그래밍

쉽게

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

Cluster management software

쉽게 풀어쓴 C 프로그래밍

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - 14주차 강의자료

JAVA PROGRAMMING 실습 05. 객체의 활용

Spring Boot

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

Microsoft PowerPoint - RMI.ppt

PowerPoint 프레젠테이션

No Slide Title

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

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

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - 03-TCP Programming.ppt

PowerPoint 프레젠테이션

Microsoft PowerPoint 웹 연동 기술.pptx

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

09-interface.key

PowerPoint 프레젠테이션

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

비긴쿡-자바 00앞부속

슬라이드 1

ThisJava ..

쉽게 풀어쓴 C 프로그래밊

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

JMF2_심빈구.PDF

유니티 변수-함수.key

PowerPoint Presentation

Design Issues

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - web-part01-ch10-문서객체모델.pptx

본 강의에 들어가기 전

PowerPoint Presentation

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

뇌를 자극하는 JSP & Servlet 슬라이드

Ext JS À¥¾ÖÇø®ÄÉÀ̼ǰ³¹ß-³¹Àå.PDF

PowerPoint Presentation

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

17장 클래스와 메소드

<4D F736F F F696E74202D20C1A63138C0E520C0CCBAA5C6AE20C3B3B8AE28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Cluster management software

歯NetworkKawuiBawuiBo.PDF

Transcription:

프로그래머를위한 Java 2, 4 판 제5장 Applet ( 신 10 장 ) 참고 : 구버전 (2005 년이전 ) 의 Chapter 5 Applet 부분참조

5.1 애플릿소개 5.1.1 애플릿소개 자바애플릿 웹브라우저내에서수행되는자바프로그램 자바애플릿은 main() 함수가없다. cf) 일반자바어플리케이션은 main() 함수부터수행 애플릿프로그램을작성하려면 Applet 클래스로부터상속받아야함 애플릿뷰어 (appletviewer) 애플릿프로그램을작성하고테스트하기위해서웹브라우저대신 애플릿클래스는항상 public으로선언되어야함 자바애플릿에는다음과같은기본적인함수가정의 init(), start(), paint(), stop(), destroy(), update() 애플릿프로그램을개발하는프로그래머는이함수들을오버라이드해서사용 Applet & Java 2D 2

5.1 애플릿소개 1. 자바애플릿을웹홈페이지에등록하기 HTML에서 applet 태그는웹에서자바애플릿을등록하기위한태그 실제애플릿은.class 파일에저장되어있고, applet 태그는애플릿클래스파일을기술 <applet code = classfile.class codebase = directory archive = archivefile.zip align = aligndirection name = appletname vspace = 20 hspace = 30 width = 200 height = 100 > </applet> applet 태그에서 code, width, height 어트리뷰트는항상존재해야 Applet & Java 2D 3

5.1 애플릿소개 어트리뷰트 code - 컴파일된자바애플릿클래스가저장된파일이름 codebase - 자바클래스파일들이존재하는디렉토리이름 codebase는 HTML 파일과자바클래스파일이 다른디렉토리에저장되어있는경우에사용 archive - 자바의.class 파일들을 zip이나 jar 파일로묶어서파일의다운로드시간을줄이기위해사용 Netscape 3.0 이상에서지원 align - 애플릿정렬위치를결정하는데사용 name - 애플릿의이름을지정 애플릿이름은한웹페이지에서여러개의애플릿이있을때애플릿간에통신하는데사용 vspace - 애플릿주위에서세로방향마진 ( 단위 : 픽셀 ) hspace - 애플릿주위에서가로방향마진 ( 단위 : 픽셀 ) width - 애플릿의가로방향크기 ( 단위 : 픽셀 ) height - 애플릿의세로방향크기 ( 단위 : 픽셀 ) Applet & Java 2D 4

5.1 애플릿소개 2. Graphics 클래스의 drawxxx() 메소드들 drawstring(string msg, int x, int y) drawline(intx1, inty1, intx2, inty2) Applet & Java 2D 5

5.1 애플릿소개 drawrect(int x, int y, int w, int h) drawoval(int x, int y, int w, int h) Applet & Java 2D 6

5.1 애플릿소개 drawroundrect(intx, inty, intw, inth, intrw, intrh) drawarc(int x, int y, int w, int h, int a, int b) Applet & Java 2D 7

5.1 애플릿소개 fillxxx() 메소드 도형을그리고내부를색으로채우는메소드 fillrect(intx, inty, intw, inth) filloval(int x, int y, int w, int h) fillroundrect(int x, int y, int w, int h, int rw, int rh) fillarc(int x, int y, int w, int h, int a, int b) Applet & Java 2D 8

5.1 애플릿소개 3. HTML 에서애플릿으로파라메터전달하기 애플릿 getparameter() 메소드 애플릿이 HTML 파일로부터값을전달받기위해서이용 HTML 에서는파라메타를전달하기위해 <param name=" 변수이름 " value=" 변수값 "> 문장을기술 자바프로그램내에서사용되는변수의이름과 HTML 의 <param name=.. > 에서 name 부분에사용된변수이름이동일한것에주의!! Applet & Java 2D 9

5.1 애플릿소개 예제 : HelloParam.java 1 import java.awt.*; 2 import java.applet.*; 3 4 public class HelloParam extends Applet { 5 String message = ""; 6 7 public void init() { 8 message = getparameter("msg"); 9 if(message == null) 10 message = "Hello"; 11 } 12 13 public void paint(graphics g) { 14 g.drawstring(message, 25, 25); 15 } 16 } HelloParam.html 파일 1 <applet code=helloparam.class width=300 height=200> 2 <param name="msg" value=" 안녕하세요 "> 3 </applet> Applet & Java 2D 10

5.1 애플릿소개 5.1.2 애플릿메소드 init() 함수 웹브라우저가자바애플릿이있는홈페이지를처음방문했을때 애플릿에서사용되는자료들을초기화하는데이용 start() 함수 애플릿이다시살아날때자동적으로호출된다. (ex) 웹브라우저가아이콘에서원래상태로돌아올때, 혹은다른페이지로이동했다가다시돌아올때자동적으로호출 오디오파일을플레이 (play) 하거나, 애니메이션을시작시킬수있다. stop() 함수 start() 함수와짝을이루어사용 웹브라우저가아이콘으로되거나, 다른홈페이지로이동할때자동적으로시작된다. 오디오파일연주나애니메이션을중지시킬수있다. stop() 함수가호출된다고해서애플릿이죽는것은아니다. Applet & Java 2D 11

5.1 애플릿소개 paint(graphics g) 함수 애플릿의그림이다시그려져야된다고판단될때자동적으로호출 (ex) 애플릿이처음시작될때, 애플릿의크기가변경될때, 애플릿이다른윈도우에가려졌다가다시보여질때 그래픽스클래스는그림을그리는데필요한정보를가지고있다 update(graphics g) 함수 애플릿에그려진그림을모두지우고 paint() 함수를호출 그림이많은경우에그림을지우고새로그리면깜빡임 (flickering) 이발생해서보기안좋은경우에, update() 함수를오버라이딩해서깜빡임을줄일수있다. repaint() 함수 프로그래머가그림을다시그려야할필요성이있는경우에호출 repaint() 함수를호출하면 repaint() 는다시 update() 를호출한다. Applet & Java 2D 12

5.1 애플릿소개 destory() 함수 웹브라우저가종료될때애플릿의호출따라서웹브라우저가종료되기전까지는애플릿이종료되지않음 프로그래머는 destory() 함수를오버라이드해서애플릿이적절하게종료될수있도록종료에필요한코드를넣을수있다. 애플릿의함수들이호출되는순서 Applet & Java 2D 13

5.1 애플릿소개 애플릿의상태 Applet & Java 2D 14

5.2 이미지그리기 이미지그리기 Graphics 메소드 : gif/jpg 등의그림파일을그려주는기능 drawimage(image im, int x, int y, ImageObserver ob) Image : 그림파일 ImageObserver : 이미지를관리하기위한인터페이스 AWT 의컴포넌트는 ImageObserver 인터페이스를임플리멘츠하였기때문에 ImageObserver 로 AWT 컴포넌트를사용 Applet 메소드 getimage(url url, String file_name)/ getimage(getdocumentbase(), String file_name) getdocumentbase(): 홈페이지에서 HTML 문서가있는곳의 URL 을 Return File Name : 해당 image 의파일명 일반적으로 getimage() 는애플릿의 init() 함수에서수행되고, 이미지를화면에출력하는것은 paint() 함수에서수행 Applet & Java 2D 15

5.2 이미지그리기 예제 : ImgTest.java (10.2 P. 552 참고 ) 1 import java.awt.*; 2 3 import java.applet.applet; 4 5 public class ImgTest extends Applet { 6 7 Image duke; 8 9 public void init() { 10 duke = getimage(getdocumentbase(),"duke.gif"); 11 } 12 13 public void paint(graphics g) { 14 g.drawimage(duke, 25, 25, this); 15 } 16 } 예제 : ImgTest.html 1 <html><head><title> 애플릿테스트 </title></head> 2 <body> 3 <applet code=imgtest width=300 height=300> 4 </applet> 5 </body> 6 </html> Applet & Java 2D 16

5.3 오디오파일 오디오클립의재생 자바언어는확장자가.au 파일인오디오클립을플레이할수있는방법을제공.wav 파일과.avi파일의플레이는 JMF(Java Media Framework) 를이용 오디오클립에관련된자바클래스는 java.applet.audioclip 클래스이다. Applet 메소드 getaudioclip(url url, String file_name) 오디오클립메소드 play() 함수 - AudioClip 클래스를플레이 loop() 함수 - 반복적으로플레이 stop() 함수 - 플레이를중지 Applet & Java 2D 17

5.3 오디오파일 예제 : AudioTest.java (10.2 P. 554 참고 ) 1 import java.awt.*; 2 import java.applet.*; 3 4 public class AudioTest extends Applet { 5 AudioClip sound; 6 7 public void init() { 8 sound=getaudioclip(getcodebase(), "bark.au"); 9 }. 14 public void start() { 15 sound.loop(); 16 } 17 public void stop() { 18 sound.stop(); 19 } 20 } Applet & Java 2D 18

5.4 (10.2.3) 자바에니메이션 자바애니메이션 보통여러장의그림은일정시간간격을두고화면에디스플레이 (display) 시켜서그림이움직이는듯하게보여주는방식 시계프로그램은매초마다시간을그래픽스클래스의 drawstring() 메소드를이용해서새로그려서작성 예제 : FClock.java.. 5 public class FClock extends Applet implements Runnable {.. 26 while(!stop) { 27 day = new Date(); 28 repaint(); 29 try { 30 Thread.sleep(1000); 31 }catch(exception ex) { 32 System.out.println("Exception:" + ex.tostring()); 33 }... Applet & Java 2D 19

5.4 (10.2.3) 자바에니메이션 더블버퍼링기법 이미지를메모리에먼저그린다음에화면에출력하는방법 깜빡거림을제거하기위해더블버퍼링사용 Image 에그림을그린다. update() 메소드를오버라이딩한다. 예제 : Clock.java... 6 public class Clock extends Applet implements Runnable {. 23 img = createimage(w, h); 24 gc = img.getgraphics();.. 43 gc.drawstring(day.tostring(),5, h -d); 44 repaint();... 53 public void update(graphics g) { 54 paint(g); 55 } 56 57 public void paint(graphics g) { 58 g.drawimage(img, 10, 50, this); 59 } Applet & Java 2D 20

5.4 (10.2.3) 자바에니메이션 MediaTracker 클래스 모든이미지가로드될때까지기다리도록해준다. 그림이나자바의클래스는비동기적으로 (asynchronous) 로드되기때문에 init() 함수에서여러장의그림을로드한다고해도다른함수가시작되기전에모든그림이로드되지는않는다. MediaTracker 은여러장의그림을모두메모리에저장하기때문에애니메이션에서중요한사항이된다. 생성자 MediaTracker(Component comp) 메소드 addimage(image image, int id) removeimage(image image) - 이미지를메모리에저장 - 이미지를메모리에서제거 Applet & Java 2D 21

5.4 (10.2.3) 자바애니메이션 애니메이션 사용할그림 Applet & Java 2D 22

5.4 (10.2.3) 자바애니메이션 예제 : AnimationTest.java 14 public void init() { 16 tracker = new MediaTracker(this); 17 maxwidth = 100; 18 maxheight = 100; 19 images = new Image[10]; 20 21 try { 22 offscrimage = createimage(maxwidth, maxheight); 23 offscrgc = offscrimage.getgraphics(); 24 offscrgc.setcolor(color.lightgray); 25 offscrgc.fillrect(0, 0, maxwidth, maxheight); 26 resize(maxwidth, maxheight); Applet & Java 2D 23

5.4 (10.2.3) 자바애니메이션 예제 : AnimationTest.java( 계속 ) 31 for (int i=0; i < 10; i++) { 32 String imagefile = new String ("T" + 33 String.valueOf(i+1) + ".gif"); 34 images[i] = getimage(getdocumentbase(), imagefile); 35 tracker.addimage (images[i], i); 36 } 37 try { 38 tracker.waitforall(); 39 } catch (InterruptedException e) { } 40 loaded = true; 41 42 runner = new Thread(this, "runner"); Applet & Java 2D 24

5.4 (10.2.3) 자바애니메이션 예제 : AnimationTest.java( 계속 ) 45 public void paint(graphics g) { 46 if (loaded) { 47 g.drawimage(offscrimage, 0, 0, this); 51 public void update(graphics g) { 52 paint(g); 55 public void start() { 56 index = 0; 57 if (tracker.checkid (index)) { 58 offscrgc.drawimage (images[index], 0, 0, this); Applet & Java 2D 25

5.4 (10.2.3) 자바애니메이션 예제 : AnimationTest.java( 계속 ) 73 public void run () { 74 while(!stop) { 75 if (tracker.checkid (index)) { 76 offscrgc.fillrect(0,0,100,100); 77 offscrgc.drawimage (images[index], 0, 0, this); 78 index++; 79 if (index >= images.length) { 80 index = 0; 81 } 82 } 83 try { 84 runner.sleep(100); 85 repaint(); Applet & Java 2D 26

5.5 2 중코드 2 중코드 애플릿으로도어플리케이션으로도사용할수있도록하는코드 애플릿에서상속받는클래스를만들고 main() 함수를만든다. 애플릿으로실행될때는 main() 함수는수행이안되고, 어플리케이션으로 수행될때만 main() 이실행된다. 2중코드를이용하면애플릿을어플리케이션으로실행시킬수있지만, 모든메소드들이잘수행되는것은아니다. getdocumentbase() 메소드는애플릿에서는잘수행되지만어플리케이션에서는원하는형태의결과를리턴하지못한다. Applet & Java 2D 27

5.5 2 중코드 예제 : HelloTwo.java. 4 public class HelloTwo extends Applet { 5 String msg; 6 Button ok; 7 8 public void init() { 9 setlayout(new BorderLayout()); 10 msg = "Hello World.."; 11 ok = new Button("OK"); 12 add("south", ok); 13 } 14 15 public void paint(graphics g) { 16 g.drawstring(msg, 25, 25); 17 } 18 19 public static void main(string args[]) { 20 Frame f = new Frame("Application"); 21 HelloTwo hello = new HelloTwo(); 22 hello.init(); 23 hello.start(); 24 f.add(hello, "Center"); Applet & Java 2D 28

5.5 2 중코드 결과 C:\> java HelloTwo C:\> appletviewer HelloTwo.html Applet & Java 2D 29

5.6 (10.2.4) 자바애플릿간의통신 자바애플릿간의통신 AppletContext 를이용하는방법 static 변수 / 메소드를이용하는방법 Applet & Java 2D 30

5.6 (10.2.4) 자바애플릿간의통신 1. AppletContext 인터페이스를이용하는방법 AppletContext 클래스는자바애플릿이실행되는환경을표현하는인터페이스 AppletContext 에는두가지그룹의메소드 웹브라우저를관리하기위한메소드 웹브라우저의한페이지에서실행되는애플릿을억세스하기위한메소드 한페이지에서실행되는애플릿을접근할수있는메소드 Applet getapplet(string name) Enumeration getapplets() getapplet() 메소드는애플릿의이름을아규먼트로받아서애플릿을리턴 애플릿의이름은 HTML에서 applet 태그에 name 필드를이용해서만들수있다. Applet & Java 2D 31

5.6 (10.2.4) 자바애플릿간의통신 HTML <applet code=usingappletcontextreceiver.class name="receiver" width=300 height=100> </applet> Applet UsingAppletContextReceiver r = (UsingAppletContextReceiver) getappletcontext().getapplet("receiver"); getapplets() 메소드의사용방법도 getapplet() 메소드와유사 AppletContext 문제점 웹브라우저에서애플릿은비동기적으로클래스들이로드되기때문에한클래스에서다른클래스가로드되어있는지알기어렵다. 애플릿이로드되지않으면 getapplet() 메소드를이용해서애플릿을접근할수없는것이다. AppletContext() 를사용하는경우에는한페이지에있는애플릿간의통신만가능하다. Applet & Java 2D 32

5.6 (10.2.4) 자바애플릿간의통신 예제 : UsingAppletContextReceiver.java 14 public void run() { 15 while(true) { 16 try { 17 Thread.sleep(1000); 18 }catch (Exception ex) {} 19 repaint(); 20 } 21 } 23 public void setmsg(string msg) { 24 this.msg = msg;. Applet & Java 2D 33

5.6 (10.2.4) 자바애플릿간의통신 예제 : UsingAppletContextSender.java 18 public void actionperformed(actionevent e) { 19 Component c = (Component) e.getsource(); 20 if(c == input) { 21 if(loaded) { 22 receiver.setmsg(input.gettext()); 23 input.settext(""); 24 }else{ 25 receiver = (UsingAppletContextReceiver) 26 getappletcontext().getapplet("receiver"); 27 if(receiver!= null) { 28 loaded = true; 29 receiver.setmsg(input.gettext()); 30 } 31 input.settext(""); Applet & Java 2D 34

5.6 (10.2.4) 자바애플릿간의통신 예제 :UsingAppletContext.html 5 <applet code=usingappletcontextreceiver.class 6 name="receiver" width=200 height=100> 7 </applet> 9 <td> 10 <applet code=usingappletcontextsender.class width=200 height=100> 11 </applet> 12 </tr> Applet & Java 2D 35

5.6 (10.2.4) 자바애플릿간의통신 2. static 변수 / 메소드를이용하는방법 객체지향언어에서 static 변수는클래스의전역변수로사용된다. 따라서클래스의인스턴스간에의사소통을위해서 static 변수가많이사용 자바에서는클래스이름만으로이러한 static 변수와메소드를접근할수있는기능을제공 static 변수 / 메소드를이용한다면웹브라우저에서애플릿간의통신이가능 예제 : UsingStaticApplet Applet & Java 2D 36

5.7(10.2.5) 자바와자바스크립트 1. 자바스크립트에서자바애플릿호출 자바와자바스크립트는웹브라우저에서서로함수호출등의방법을통해의사소통 자바스크립트는웹브라우저의다른컴포넌트를제어하는것과같은방법으로애플릿을제어 <applet> 태그에 name 어트리뷰트를이용해서애플릿의함수를호출할수있다 Applet & Java 2D 37

5.7(10.2.5) 자바와자바스크립트 예제 : JSApplet.html 1 <head> 2 <script> 3 function change(form) 4 document.js.setbg(form.bg.value); 5 document.js.setfg(form.fg.value); 6 document.js.setmessage(form.msg.value); 7 document.jsform.msg.value = document.js.getmessage(); 8 form.fg.value = document.js.getfg(); 9 form.bg.value = document.js.getbg(); 10 11 </script> 12 </head> 13 14 <body bgcolor=lightgreen> 15 <applet name="js" code=jsapplet.class width=200 height=150> 16 </applet>. 23 <input type=button value=" 적용 " onclick="change(this.form);"> 24 <input type=reset value=" 초기값 *"> 25 </center> 26 </form> 27 </body> Applet & Java 2D 38

5.7(10.2.5) 자바와자바스크립트 2. 자바애플릿에서자바스크립트호출 자바애플릿에서자바스크립트의함수를호출하는경우는약간복잡네스케이프 3.0 버전에서는자바애플릿에서자바스크립트 URL을지원, 버전이올라가면서자바스크립트 URL 대신에 JSObject 클래스를이용하는방법으로변경 JSObject 를사용하는경우 JSObject 는네스케이프 3.0 이상과 MS 익스플로러 4.0 이상에서지원 JSObject 를사용하기위한단계 1. JSObject 를설치하고, CLASSPATH 를설정한다. JSObject 는 java40.jar 에들어있다. java40.jar 파일을적당한디렉토리에풀고, CLASSPATH 를설정한다. % jar xvf java40.jar Applet & Java 2D 39

5.7(10.2.5) 자바와자바스크립트 2. 애플릿프로그램에 JSObject 를 import 한다. import netscape.javascript.jsobject; 3. 자바애플릿에서현재창에대한자바스크립트레퍼런스를얻는다. JSObject window = JSObject.getWindow(this); 4. JSObject 의 getmember() 메소드를이용해서원하는자바스크립트프로퍼티를읽어올수있다. JSObject document = (JSObject)window.getMember("document"); String cookies = (String)document.cookie; JSObject form = (JSObject) document.getmember("form_name"); JSObject element = (JSObject) document.getmember("element_name"); 5. JSObject 의 setmember() 메소드를이용해서원하는자바스크립트프로퍼티의값을설정할수있다. document.setmember("bgcolor", "red"); 6. JSObject 의 call() 메소드를이용해서자바스크립트의함수를호출 String message = "alert message!!"; window.call("alert", message); window.eval("alert('alert message!!')"); 7. HTML 의 applet 태그에 MAYSCRIPT 를설정해주어야한다. <applet code=.. width=.. height=.. MAYSCRIPT> </applet> Applet & Java 2D 40

5.9 (10.2.6) 애플릿을이용한홈페이지이동 URL 클래스 URL (Uniform Resource Locator ) 을표현하기위해서사용되는클래스 URLConnection 클래스와함께 HTTP 프로토콜을통한웹이나 file:// URL 에존재하는자원에접근할수있는방법을제공 URL 의일반적인형태 protocol://hostname[:port]/path/filename#section AppletContext showdocument() 해당사이트의내용을보여줌 Applet & Java 2D 41

5.9 (10.2.6) 애플릿을이용한홈페이지이동 예제 : URLButton.java 6 public class URLButton extends Applet implements ActionListener { 7 URL url = null; 8 String title = null; 9 10 public void init() {. 19 try { 20 url = new URL(urlString); 21 }catch(malformedurlexception e) { 22 System.out.println("Invalid URL:"+ urlstring); 23 } 24 Button site = new Button(title); 25 site.addactionlistener(this); 26 site.setactioncommand(title); 27 add(site); 28 }. 32 if(cmd.equals(title)) { 33 getappletcontext().showdocument(url); 34 }... Applet & Java 2D 42

5.10 (10.3) 자바 2D JDK 1.2에포함된자바 2D는 AWT에서보다나은그래픽, 텍스트, 이미지기능을제공 프로그래머는자바 2D를이용해서보다나은사용자인터페이스를개발, 2D에서제공되는풍부한라이브러리를이용하는경우에보다진보된 CAD/CAM 등의응용프로그램도작성 2D를다른JMF(Java Media Framework) 와같이사용하는경우에, 애니메이션및멀티미디어프리젠테이션을만들고디스플레이시킬수있다 자바 2D 관련클래스들은하나의패키지에속한것이아니고여러패키지에분포되어있다. java.awt java.awt.geom java.awt.font java.awt.color java.awt.image java.awt.image.renderable java.awt.print Applet & Java 2D 43

5.10 (10.3) 자바 2D JDK 1.2 이후 - 복잡한그래픽스가가능한 Graphics2D 클래스를제공 Graphics2D 클래스는기존의 Graphics 클래스로부터상속받는다. Graphics2D 렌더링컨텍스트 (rendering context) Graphics2D 는선의스타일이나채색패턴과같은속성 렌더링컨텍스트 그래픽속성지정 렌더링컨텍스트의종류 스트로크 (stroke) 펜의스타일을의미하며, 형태의외각선에적용된다. 예 : 선의굵기, 선의종류, 선끝과연결부분의종류 페인트 (paint) 형태의내부를채워주는스타일을의미한다예 : 단색으로칠하기, 그라데이션으로칠하기, 패턴을주어칠하기 컴포지션스타일 (compositioning style) 오버래핑을이용한렌더링방법이다. 트랜스폼 (tranform) : 형태를변경하는방법이다. 예 : 회전, 축소 / 확대, 기울이기 Applet & Java 2D 44

5.10 (10.3) 자바 2D 클립 (clip) 형태의일부만화면에보이도록하는것이다. 폰트 문자열을그림형태로표현한다. 렌더링힌트 그림의화질과속도중에서어느것을우선할것인가를기술한다. 예 : antialiasing 사용여부 렌더링컨텍스트에속성설정을위한 setxxx() 메소드 void setstroke(stroke s) void setpaint(paint paint) void setcomposite(composite comp) void settransform(affinetransform tx) void setclip(shape clip) void setfont(font font) void setrenderinghints(map hints) Applet & Java 2D 45

5.10 (10.3) 자바 2D 예제 : Drawer.java 4 public abstract class Drawer extends JFrame {... 23 public void makebody() { 24 Canvas c = new Canvas(); 25 getcontentpane().add(c, "Center"); 26 } 27 public abstract void draw(graphics g); 28 29 public class Canvas extends JPanel { 30 public void paint(graphics g) { 31 draw(g); Applet & Java 2D 46

5.10 (10.3) 자바 2D 예제 : TextureExample.java 17 Toolkit tk = Toolkit.getDefaultToolkit(); 18 Image im = tk.getimage("bird.gif"); 30 imgrect = new Rectangle(0, 0, 31 im.getwidth(this), im.getheight(this)); 32 texture = new TexturePaint(img, imgrect); 33 } 34 35 public void draw(graphics g) { 36 Graphics2D g2 = (Graphics2D) g; 37 g2.setpaint(texture); 38 g2.fill(rect); Applet & Java 2D 47

5.10 (10.3) 자바 2D java.awt.goem 패키지 점, 선, 곡선, 사각형, 타원등의기본적인도형을위한클래스들을제공 Arc2D Ellipse2D QuadCurve2D Area GeneralPath Rectangle2D CubicCurve2D Line2D RectangularShape Dimension2D Point2D RoundRectangle2D Graphics2D 클래스를이용해서그림을그리는경우에는 Graphics 클래스와는다르게그림을그릴객체를미리만들고, Graphics2D 클래스의 draw나 fill 메소드를이용해서그림을화면에나타낸다. Applet & Java 2D 48

5.10 (10.3) 자바 2D 예제 : ShapeExample.java 1 import java.awt.*; 2 import java.applet.*; 3 import java.awt.geom.*; 4 5 public class ShapeExample extends Applet { 6 Ellipse2D.Double circle; 7 Rectangle2D.Double rect; 8 9 public void init() { 10 circle = new Ellipse2D.Double(10, 10, 200, 200); 11 rect = new Rectangle2D.Double(10, 10, 200, 200); 12 } 13 14 public void paint(graphics g) { 15 Graphics2D g2 = (Graphics2D) g; 16 g2.fill(circle); 17 g2.draw(rect); 18 } 19 } Applet & Java 2D 49

5.10 (10.3) 자바 2D GradientPaint 클래스 그라데이션을주기위해서사용하는객체 GradientPaint 객체를 Graphics2D 클래스에 setpaint() 메소드를이용해서값을설정해야한다. 생성자 GradientPaint(float x1, float y1, Color color1, float x2, float y2, Color color2, boolean cyclic) x1과 y1은시작좌표이고, x2와 y2는끝좌표 그라데이션은시작좌표에서 color1 색으로부터끝좌표에서 color2 색으로이루어진다. cyclic은그라데이션이반복적으로이루어지는가여부를기술 Applet & Java 2D 50

5.10 (10.3) 자바 2D 예제 : GradientExample.java 1 import java.awt.*; 2 import java.applet.*; 3 import java.awt.geom.*; 4 5 public class GradientExample extends Applet { 6 Ellipse2D.Double circle; 7 Rectangle2D.Double rect; 8 GradientPaint gradient;... 10 public void init() { 11 gradient = new GradientPaint(10, 10, Color.red, 200, 200, Color.yellow, true); 12 circle = new Ellipse2D.Double(10, 10, 200, 200); 13 rect = new Rectangle2D.Double(10, 10, 200, 200); 14 } 15 16 public void paint(graphics g) { 17 Graphics2D g2 = (Graphics2D) g; 18 g2.setpaint(gradient); 19 g2.draw(rect); 20 g2.fill(circle); Applet & Java 2D 51

5.10 (10.3) 자바 2D BasicStroke 클래스 선의굵기나스타일을지정하기위해서는스트로크 (stroke) 를이용 자바 2D에서스트로크를설정하기위해서는 BasicStroke 클래스를이용 생성자 BasicStroke() BasicStroke(float width) BasicStroke(float width, int cap, int join) BasicStroke(float width, int cap, int join, float miterlimit) BasicStroke(float width, int cap, int join, float miterlimit, float[] dash, float dash_phase) Applet & Java 2D 52

5.10 (10.3) 자바 2D 예제 : StrokeTest.java 1 import java.awt.*; 2 import java.applet.*; 3 import java.awt.geom.*; 4 5 public class StrokeTest extends Applet { 6 Rectangle2D.Double rect; 7 Ellipse2D.Double circle; 8 9 public void init() { 10 rect = new Rectangle2D.Double(20, 20, 220, 220); 11 circle = new Ellipse2D.Double(20, 20, 220, 220); 12 } 13 14 public void paint(graphics g) { 15 Graphics2D g2 = (Graphics2D) g; 16 g2.setstroke(new BasicStroke(2)); 17 g2.draw(rect); 18 float[] dashpattern = 30, 10, 10, 10 ; 19 g2.setstroke(new BasicStroke(8, BasicStroke.CAP_BUTT, 20 BasicStroke.JOIN_MITER, 10, dashpattern, 0)); 21 g2.draw(circle); 22 } 23 } Applet & Java 2D 53

5.10 (10.3) 자바 2D TexturePaint 클래스 텍스쳐 (texture) 배경을만드는데사용되는클래스 생성자 TexturePaint(BufferedImage txtr, Rectangle2D rect2d) 예제 : TextureExample.java 1 import java.awt.*; 2 import java.applet.*; 3 import java.awt.geom.*; 4 import java.awt.image.*; 5 6 public class TextureExample extends Applet { 7 Rectangle2D.Double rect; 8 BufferedImage img; 9 TexturePaint texture; 10 Rectangle imgrect; 11 Applet & Java 2D 54

5.10 (10.3) 자바 2D 12 public void init() { 13 rect = new Rectangle2D.Double(10, 10, 200, 200); 14 Image im = getimage(getcodebase(), "bird.gif"); 15 MediaTracker t = new MediaTracker(this); 16 t.addimage(im, 0); 17 try { 18 t.waitforall(); 19 }catch(exception e) { 20 System.out.println("MediaTracker error"); 21 } 22 img = new BufferedImage(im.getWidth(this), im.getheight(this), BufferedImage.TYPE_INT_RGB); 23 Graphics2D d2 = img.creategraphics(); 24 d2.drawimage(im, 0, 0, this); 25 imgrect = new Rectangle(0, 0, im.getwidth(this), im.getheight(this)); 26 texture = new TexturePaint(img, imgrect); 27 } 28 29 public void paint(graphics g) { 30 Graphics2D g2 = (Graphics2D) g; 31 g2.setpaint(texture); 32 g2.fill(rect); 33 } 34 } Applet & Java 2D 55

5.10 (10.3) 자바 2D tanslate() / rotate() 메소드 좌표를이동하거나그림을회전시키기위한메소드 void translate(double tx, double ty) void rotate(double theta) 예제 : RotateTest.java 1 import java.awt.*; 2 import java.awt.geom.*; 3 import java.applet.*; 4 5 public class RotateTest extends Applet { 6 Rectangle2D.Double rect; 7 8 public void init() { 9 rect = new Rectangle2D.Double(10, 10, 150, 50); 10 } 11 Applet & Java 2D 56

5.10 (10.3) 자바 2D 설명 12 public void paint(graphics g) { 13 Graphics2D g2 = (Graphics2D) g; 14 g2.draw(rect); 15 g2.translate(80, 30); 16 g2.rotate(math.pi/8.0); 17 g2.draw(rect); 18 19 g2.translate(150, 150); 20 for(int i=0; i < 4; i++) { 21 g2.rotate(math.pi/2.0); 22 g2.drawstring("hello World", 0, 0); 23 } 24 } 25 } 15 g2.translate(80, 30); (80, 30) 위치로이동한다. 16 g2.rotate(math.pi/8.0); Applet & Java 2D 57

GeneralPath 클래스 5.10 (10.3) 자바 2D 직선이나곡선으로연결되는도형을그릴수있는방법을제공한다. 예제 : GeneralRect2.java 1 import java.awt.*; 2 import java.awt.geom.*; 3 import java.applet.*; 4 5 public class GeneralRect2 extends Applet { 6 7 public void paint(graphics g) { 8 Graphics2D g2 =(Graphics2D) g; 9 g2.setcolor(color.blue); 10 GeneralPath rect = new GeneralPath(GeneralPath.WIND_EVEN_ODD); 11 rect.moveto(25.0f, 25.0f); 12 rect.lineto(100.0f, 25.0f); 13 rect.lineto(25.0f, 80.0f); 14 rect.lineto(100.0f, 80.0f); 15 rect.closepath(); 16 g2.fill(rect); 17 } 18 } Applet & Java 2D 58

10.4 프린트 자바프린트 자바응용프로그램에서프린트를수행하기위한기능 프로그램에서작업절차 1. 프린트포맷을정의하기위한 DocFlavor 객체를얻는다. 2. 프린트서비스의특성을지정하기위한 AttributeSet 객체를생성하고, 속성값을지정한다. 3. DocFlavor와 AttributeSet에지정된속성을만족하는프린트서비스를찾는다. 4. 프린트서비스를이용해서프린트잡 (job) 을생성한다. 5. 프린트잡의 print() 메소드를호출한다. Applet & Java 2D 59

10.4 프린트 프린트관련클래스들 DocFlavor : 출력할내용의포맷을기술 AttributeSet : 프린트속성을기술 PrintServiceLookup : 프린트서비스찾기 PrintService : 프린트의기능과특성표현 DocPrintJob : 프린트작업수행 Applet & Java 2D 60

10.4 프린트 예제 : PrintImage.java 12 DocFlavor flavor = DocFlavor.INPUT_STREAM.JPEG; 13 PrintRequestAttributeSet aset = 14 new HashPrintRequestAttributeSet(); 15 aset.add(mediasizename.iso_a4); 16 aset.add(new Copies(2)); 17 18 PrintService service = 19 PrintServiceLookup.lookupDefaultPrintService(); 20 21 if(service!= null) { 22 DocPrintJob job = service.createprintjob(); 23 FileInputStream in = new FileInputStream(args[0]); 24 DocAttributeSet das = new HashDocAttributeSet(); 25 Doc doc = new SimpleDoc(in, flavor, das); 26 job.print(doc, aset); Applet & Java 2D 61