자바애플릿
학습목표 애플릿동작환경 브라우저에서애플릿이동작하는방법 애플릿프로그램밍 Applet 클래스 폰트및칼라 이미지로드및출력 애니메이션 더블버퍼링을이용한이미지로드및출력 사운드로드및출력 애플릿에서이벤트처리
애플릿프로그램이란? 클라이언트시스템이서버로부터웹페이지를다운로드받았을때, 웹페이지의특정한윈도우에서동작하는프로그램 동작과정 www.webserver.com 2 4 웹서버 Sample.html MyApplet.class 1 http://www.webserver.com/sample.html 3 Sample.html MyApplet.class 5 <HTML> <BODY> 6 웹브라우저 애플릿프로그램 <APPLET code=myapplet.class width=250 height=100> </APPLET> </BODY> </HTML>
애플릿클래스 애플릿은 java.awt.applet 클래스로부터상속받아작성해야함. Applet 클래스에서지원하는주요메소드 void init(): 애플릿이실행을시작할때호출됨. 애플릿을위해호출되는첫번째메서드 void start(): 애플릿이실행을시작해야할때브라우저에의해호출됨. init() 이후에자동으로호출 void stop(): 애플릿중지를위해브라우저에의해호출 void destroy(): 애플릿이종결되기전에브라우저에의해호출 void paint(graphics g): 애플릿창에텍스트출력및그림을그리는기능등을수행
애플릿생명주기 애플릿의메소드를호출을통해애플릿은생성되어소멸됨. 생성에서소멸까지의생명주기
애플릿프로그램예 MyApplet.java import java.applet.applet; import java.awt.*; public class MyApplet extends Applet public void init(){ // init() 함수생략가능 public void paint(graphics g){ g.drawstring(" 안녕하세요!! 애플릿예제입니다.", 50, 50); MyApplet.html <HTML> <HEAD> <TITLE> Hello </TITLE> </HEAD> <BODY> <APPLET CODE= MyApplet.class", WIDTH=250 HEIGHT=100> </APPLET> </BODY> </HTML>
애플릿골격 import java.awt.*; import java.applet.applet; public class MyApplet extends Applet { // 먼저호출된 public void init(){ // 초기화 public void start(){ //init() 이후에두번째로호출됨. 애플릿이다시시작될때마다호출 // 실행을시작하거나다시계속한다 public void stop() { // 애플릿이중단될때호출 // 실행을중지 public void destroy() { // 애플릿이종결될때호출. 마지막으로실행되는메서드 // 중단활동을수행 public void paint(graphics g) { // 윈도우에내용을다시출력
APPLET 태그 CODE, WIDTH 및 HEIGHT 필수항목을제외한선택항목의 APPLET 태그를제공 <APPLET [CODEBASE = 애플릿의 URL] CODE= 애플릿파일이름 [ALT= 대체텍스트 ][NAME= 애플릿객체이름 ] WIDTH= 애플릿창의가로픽셀수 HEIGHT= 애플릿창의높이픽셀수 [ALIGN= 정렬값 ] [HSPACE= 픽셀수 ][VSPACE= 픽셀수 ] [<PARAM NAME=" 파라미터 1" VALUE=" 값 ">] [<PARAM NAME=" 파라미터 2" VALUE=" 값 ">]... </APPLET>
애플릿에매개변수전달예 (1/2) 애플릿은명령어에의하여실행되지않으므로 APPLET 태그내에 PARAM 태그를사용하여애플릿에필요한매개변수를전달한다 예 : 애플릿에서출력되는색깔, 글자의크기및애니메이션속도 appletparam.html <HTML> <HEAD> <TITLE> Hello </TITLE> </HEAD> <BODY> <APPLET CODE="ParameterPass.class" WIDTH=250 HEIGHT=80> <PARAM NAME="msg" VALUE=" 매개변수전달예제."> <PARAM NAME="font" VALUE="Serif"> <PARAM NAME="size" VALUE="20"> </APPLET> </BODY> </HTML>
애플릿에매개변수전달예 (1/2) import java.awt.*; import java.applet.applet; public class ParameterPass extends Applet { String f_name, message, size; int f_size; Font font; public void init(){ message = getparameter("msg"); f_name = getparameter("font"); msg 해당하는 매개변수전달예제. 문자열, font 에해당하는문자열 Serif 를전달받아각각 message 및 f_name 에할당한다. if(f_name==null) f_name="courier"; size = getparameter("size"); // "size" 에해당하는값을전달받는다. try{ if(size!= null) f_size = Integer.parseInt(size); else f_size=10; 실행결과 catch(numberformatexception e){ public void paint(graphics g) { font = new Font(f_name, Font.BOLD, f_size); g.setfont(font); g.drawstring(message, 5, 40);
애플릿클래스의주요메서드 void resize(int width, int height)
애플릿에출력하기 윈도우배경컬러설정 (init() 메서드내에서 ) setbackground(color newcolor), getbackground() setforeground(color newcolor), getforeground() Color (Color.black, Color.blue, Color.cyan, Color.green, Color.red, Color.yellow 등등 ) Graphics 클래스로제공 (paint() 메서드내에서 ) Graphics 메서드를사용하여그리고자하는내용을화면에출력
애플릿에출력하기 import java.awt.*; import java.applet.applet; public class SampleDraw extends Applet { String msg; public void init(){ setbackground(color.cyan); setforeground(color.red); msg = Inside init( ) ; public void start() { msg += Inside start( ) ; public void paint(graphics g) { msg += Inside paint( ) ; g.drawstring(msg, 10, 30);
다시그리기 (repaint) 요청하기 애플릿이윈도우에출력되는정보를갱신할필요가있을때마다 repaint() 호출 메서드 void repaint(): 전체다시그리기 void repaint(int left, int top, int width, int height) void repaint(long maxdelay) void repaint(long maxdelay, int left, int top, int width, int height)
drawarc drawoval Graphics 클래스메서드 메소드모양형식 drawpolygon drawrect drawroundrect draw3drect fillarc public void drawarc(int x, int y, int width, int height, int startangle, int arcangle); public void drawoval(int x, int y, int width, int height) public void drawpolygon(int[] xpoints, int[] ypoints, int npoints) public void drawrect(int x, int y, int width, int height) public void drawroundrect(int x, int y, int width, int height, int arcwidth, int archeight) public void draw3drect(int x, int y, int width, int height, boolean raised) public void fillarc(int x, int y, int width, int height, int startangle, int arcangle); filloval public void filloval(int x, int y, int width, int height)
Graphics 클래스메서드 메소드모양형식 fillpolygon fillrect public void fillpolygon(int[] xpoints, int[] ypoints, int npoints) public void fillrect(int x, int y, int width, int height) fillroundrect fill3drect drawline public void fillroundrect(int x, int y, int width, int height, int arcwidth, int archeight) public void fill3drect(int x, int y, int width, int height, boolean raised) public void drawline(int x1, int y1, int x2, int y2); drawployline public void drawpolyline(int[] xpoints, int[] ypoints, int npoints) drawstring 애플릿예제 public void drawstring(string str, int x, int y); drawimage public void drawimage(image img, int x, int y, Color color, ImageObserver imgobsr);
import java.applet.applet; import java.awt.*; public class DrawExamples extends Applet { int x=294, y=210, r=260; public void init(){ // 생략가능 public void paint(graphics g){ g.drawline(50, 10, 200, 10); g.drawline(200, 10, 200, 70); g.drawline(200, 70, 50, 70); g.drawline(50, 70, 50, 10); g.drawrect(150, 110, 200, 60); g.drawoval(150, 110, 200, 60); circle(x, y, r, g); polygon(g); 그리기예제 public void circle(int x, int y, int r, Graphics g){ int w=r, h=r; int hr=r/2, hx=x+15, hy=y+15; // 반원을위한변수 g.drawoval(x, y, w, h); g.drawstring(" 중점 ", x+20, y+40); halfcircle(hx, hy, hr, g); public void halfcircle(int hx, int hy, int hr, Graphics g){ int hw=hr, hh=hr; g.drawoval(hx, hy, hw, hh); public void polygon(graphics g) { int x[]={10, 189, 234, 200, 170, 155, 120, 81, 10; int y[]={4, 15, 75, 70, 60, 55, 40, 30, 12; int n=x.length; g.drawpolygon(x, y, n);
애플릿의제한점 자바애플릿제한사항 ( 보안을위해 ) 다른프로그램을실행시키지못한다. 지역파일의입출력이불가능하다. 어떠한네이티브메소드도호출하지못한다. 내려받은서버이외의어떠한서버에도네트워크통신이불가능하다.
Font 클래스 자바에서폰트를처리하는클래스 java.awt 패키지에포함된클래스 drawstring() 메소드에의하여출력되는문자열에대한폰트의이름, 스타일및크기를결정한다 public Font(String name, int style, int size) name 은 "Arial", "Courier", "Serif" 및 SansSerif" 등과같은폰트의이름을의미 style 는 Font 클래스에서클래스종단변수 ( 상수값 ) 로정의된 PLAIN, BOLD 및 Italic 중에서하나를선택할수있으며, 각각은일반형, 강조체및이탤릭체를의미 size 는폰트의크기를결정하는정수값
FontMetrics 클래스 보여지는문자의폭, 높이및현재폰트에관한상세한정보를알아내기위해사용되는클래스 메서드
import java.awt.*; import java.applet.applet; public class GetFontInfo extends Applet { public void paint(graphics g){ Font ft1 = new Font("SansSerif", Font.PLAIN, 16); g.setfont(ft1); // ft1 폰트설정 g.drawstring("sansserif 폰트, 일반형및크기가 16", 1, 30); Font ft2 = new Font("Serif", Font.BOLD, 15); g.setfont(ft2); // ft2 폰트설정 g.drawstring("serif 폰트, 강조체및크기가 15", 25, 50); Font ft = new Font("SansSerif", Font.BOLD, 15); FontMetrics fm = getfontmetrics(ft); // fm FontMetrics 객체생성 g.setfont(ft); String s = " 문자열을애플릿의중앙에출력한다 "; int x = (getsize().width-fm.stringwidth(s))/2; int y = getsize().height/2; g.drawstring(s, x, y);
Color 클래스 그리기작업에사용되는현재의색및애플릿이나기타창들의배경색을설정하는클래스 생성자 public Color(int c): 정수변수는 32비트중 24비트만을사용하여색을표현 24-31:0xff, 16-23:red, 8-15:green, 0-7: blue public Color(int r, int g, int b): r,g,b(0-255) 관련메서드 setcolor(), setbackground(), setforeground()
Color 클래스사용예제 import java.awt.*; import java.applet.applet; public class SetByColor extends Applet { public void paint(graphics g){ Color c1 = Color.red; g.setcolor(c1); // 빨간색으로설정 g.drawoval(50, 20, 20, 20); g.drawline(50, 20, 200, 70); Color c2 = new Color(0, 255, 0); g.setcolor(c2); // 녹색으로설정 g.fillrect(150, 50, 20, 20);
Image 로드및출력 이미지를로드해서애플릿에보여주는과정 getimage() 메소드를이용하여파일시스템의이미지파일을로드 Image img; // img Image 객체선언 img=getimage(getdocumentbase(), khyoo.jpg"); 화면에이미지를보여주기위해서는 Graphics 클래스의 drawimage() 메서드를이용 public abstract boolean drawimage(image img, int x, int y, ImageObserver observer)
이미지로드및출력예 import java.awt.*; import java.applet.applet; import java.awt.image.*; public class ImageLoad extends Applet { Image image; public void init(){ image=getimage(getdocumentbase(), khyoo.jpg"); public void paint(graphics g){ g.drawimage(image, 0, 0, this);
여러이미지로드하여출력 (1/2) import java.awt.*; import java.applet.*; import java.io.*; public class Animation extends Applet implements Runnable { int i; Thread engine=null; MediaTracker tracker; final int imagenum=10; Image im[]=new Image[imageNum]; public void init(){ tracker=new MediaTracker(this); for(i=2; i<=10; i++){ im[i-1]=getimage(getcodebase(), "images/"+ FMAG00"+i+".gif"); tracker.addimage(im[i-1], i-1); public void start(){ if(engine==null){ engine=new Thread(this); // 또는 this 대신에 Thread(new Animation()) engine.start();
여러이미지로드하여출력 (2/2) public void stop(){ engine=null; public void run(){ Thread me=thread.currentthread(); // 현재실행중인스레드를반환한다. me.setpriority(thread.min_priority); while(true){ try{ for(i=0; i<10; i++){ repaint(); //Thread.sleep(500); catch(interruptedexception e){ public void paint(graphics g){ if(tracker.checkall(true)) // 이미지로드를체크한다. g.drawimage(im[i],0,0,this); else g.drawstring(" 이미지를읽고있습니다.", 20,20);
처리과정 오디오로드및출력 getaudioclip() 메소드를이용하여 AudioClip 클래스객체를생성한다. getaudioclip() 메소드는 Applet 클래스에서지원하며, 사용형식은다음과같다 AudioClip getaudioclip(url, 오디오파일이름 ) 생성된 AudioClip 객체및 AudioClip 클래스에서지원하는 3개의메소드를이용하여해당오디오파일을플레이한다.
오디오로드및출력예 import java.awt.*; import java.applet.*; import java.io.*; public class AudioPlay extends Applet implements Runnable { Thread engine=null; AudioClip music; public void init(){ music = getaudioclip(getcodebase(), "audios/"+"spacemusic.au"); public void start(){ if(engine==null){ engine=new Thread(this); engine.start(); public void stop(){ engine=null; music.stop(); public void run(){ music.loop(); public void paint(graphics g){ g.drawstring(" 오디오를플레이중입니다.", 20, 20);