Lesson 10. 애플릿과 그래픽
애플릿이란? 자바 애플릿 애플릿(applet)은 컨테이너의 일종이며, 컨테이너는 컴포넌트 또는 다른 컨테이너를 포함할 수 있다. 자바 애플릿(Java Applet)은 웹 브라우저 상에서 실행되는 자바 프로그램이다. 자바 애플릿은 서버에서 클라이언트 쪽으로 전송되어 클라이언트에서 실행된다. 또한 애플릿 프로그램은 main() 메소드를 갖지 않으며, 웹 브라우저나 애플릿 뷰어의 데이터 창에서만 수행되는 제한된 프로그램이다. 애플릿 프로그램이 생성되고 실행이 종료될 때까지 일정한 동작을 반복하는 생명 주기(life cycle)를 가지고 있는 특징이 있다
애플릿과 그래픽 자바 애플릿과 그래픽 자바 애플릿과 그래픽 사용자 인터페이스(GUI) 다양한 그래픽 기능은 Graphics 클래스에서 제공된다. Graphics 클래스는 java.awt 패키지에 포함된 java.awt.Graphics이다 이 클래스에는 다양한 그래픽을 애플릿이나 애플리케이션에 표시할 수 있다. 예를 들면, 글꼴, 색깔, 선, 사각형, 원, 원호, 그림 등이다. 자바 애플릿과 그래픽 사용자 인터페이스(GUI) 그래픽사용자인터페이스(GUI: Graphic User Interface)의 기능은 java.awt 패키지에서 제공하고 있다. GUI의 대표적인 예가 AWT이다. AWT의 컴포넌트로는 버튼, 레이블, 체크상자, 초이스, 리스트, 스크롤바, 텍스트 필드, 텍스트 영역, 메뉴 바, 메뉴 아이템 등이 있다.
자바 애플릿의 프로그래밍 과정 소스 파일명이 Jv_ap.java, Jv_ap.java.html이라고 하면 자바 애플릿의 프로그래밍 과정은 다음과 같다. (예) 콘솔(MS-DOS) 환경에서 javac Jv_ap.java를 실행하면 Jv_ap.class 파일이 생성된다. ① 자바클래스명 .java ④ 실행결과 (애플릿 뷰어) ⑤ 실행결과 (웹 브라우저) ③ 자바클래스명 .class 자바컴파일러 (javac) 애플릿뷰어 혹은 웹 브라우저 ② 자바클래스명 .html
자바 애플릿의 실행시 동작 원리 ① 사용자(클라이언트)는 서버에게 접속하여 HTML 문서를 요청한다. ...... <APPLET CODE = "Jv_ap.class"> </APPLET> </HTML> ....... <<클라이언트>> http://......Jv_ap.html <<서버>> HTML 문서 바이트 코드 ① ② ③ ④ ① 사용자(클라이언트)는 서버에게 접속하여 HTML 문서를 요청한다. ② 웹서버는 클라이언트에게 HTML 문서를 다운로드한다. ③ 클라이언트는 HTML 문서에 APPLET 태그가 포함되어 있고 웹 브라우저가 자바를 지원한다면, 웹 브라우저는 애플릿을 정의한 자바 코드의 속성 값을 찾고 웹서버에게 바이트 코드를 요청한다. ④ 웹서버는 클라이언트에게 애플릿 바이트 코드를 다운로드한다. ⑤ 클라이언트의 웹 브라우저는 이 바이트 코드를 해석하여 웹 브라우저 내에서 애플릿을 실행시킨다.
애플릿 동작과정
CGI(Common Gateway Interface)
애플릿의 정의 import java.applet.Applet; Applet 패키지 import Applet 클래스 상속 class 애플릿이름 extends Applet 애플릿 헤더 { // 멤버변수 선언 // 메소드 구현 } 애플릿 바디
CODE CODEBASE ARCHIVE NAME ALIGN HSPACE VSPACE WIDTH HEIGHT PARAM HTML문서에서 인수 전달하기 <HTML> <BODY> <APPLET CODE=애플릿이름.class [ CODEBASE=애플릿위치 ARCHIVE=JAR파일이름 NAME=애플릿이름 ALIGN=정렬방식 HSPACE=수평공간크기 VSPACE=수직공간크기 ] WIDTH=가로크기 HEIGHT=세로크기> <PARAM NAME=속성이름 VALUE=속성값> </APPLET> </BODY> </HTML> CODE CODEBASE ARCHIVE NAME ALIGN HSPACE VSPACE WIDTH HEIGHT PARAM
애플릿 라이프 사이클 메소드 기능 void init() 애플릿을 초기화한다. 웹 브라우저에 의해서 애플릿이 메모리에 적재될 때 이 메소드가 호출된다. 객체의 생성, 폰트나 이미지 값 등의 초기화 작업을 수행하며 애플릿이 시작될 때 단 한번 수행된다. void start() 애플릿을 시작한다. init() 메소드 호출 후에 이 메소드가 호출되며, 애플릿이 잠시 중지하였다가 다시 재개할 때도 실행된다. 이 메소드는 애플릿이 실행되는 동안에 여러번 실행될 수 있다. void stop() 애플릿을 중단한다. 애플릿이 포함된 웹페이지를 벗어나거나 웹 브라우저가 아이콘화되었을 때 자동으로 호출한다. void destroy() 애플릿을 종료한다. 즉, 애플릿의 자원을 반납한다. void paint(Graphics g) 컴포넌트(Component) 클래스에서 상속 받는 메소드로서 Graphics 객체 g를 이용하여 그림을 그린다. void showStatus(String s) 웹 브라우저의 상태 표시 줄에 s를 표시한다.
자바 애플릿 프로그램의 구조 import java.applet.*; import java.awt.*; public class 클래스명 extends Applet { ............. public void init() { ...................... } public void start() { ....................... } public void stop() { ........................ } public void destroy() { .........................} public void paint(Graphics g) { ........................... g.drawString(“..................”); .......................... } } <HTML> ..................... <APPLET CODE = "클래스명" WIDTH=가로픽셀수 HEIGHT=세로픽셀수 [ CODEBASE = 클래스 기본 URL ] [ ALT = 교체 텍스트 ] [ NAME = 애플릿 인스턴스명 ] [ ALIGN = 정렬 값 ] [ VSPACE = 픽셀 수 ] [ HSPACE = 픽셀 수 ] > [ < PARAM NAME = 파라미터명1 VALUE = 값1> ] ......................... </APPLET> ...................... </HTML>
애플릿 컴파일과 실행 컴파일 실행 javac MyApplet.java 애플릿 프로그램 appletviewer MyApplet.html 애플릿이 연결된 HTML 문서
색상 지정 1 : import java.awt.*; 2 : import java.applet.*; 3 : 4 : public class ColorTest extends Applet 5 : { 6 : public void init() 7 : { 8 : setBackground(Color.yellow); 9 : } 10 : 11 : public void paint(Graphics g) 12 : { 13 : g.setColor(Color.blue); 14 : g.drawString("노란색 바탕에 파란색으로 글씨를 씁니다.", 20, 100); 15 : } 16 : }
글꼴 지정 Font myFont = new Font("SansSerif", Font.BOLD, 12); 글꼴이름 글꼴형태 글꼴크기 Font myFont = new Font("SansSerif", Font.BOLD, 12); g.setFont(myFont); 그래픽컨텍스트 Font형인수 Font.PLAIN Font.BOLD Font.ITALIC Font.BOLD+Font.ITALIC 자바 표준 글꼴 Serif SansSerif Monospaced
문자 출력 1 : import java.awt.*; 2 : import java.applet.*; 3 : 4 : public class StringTest extends Applet 5 : { 6 : char[] myChars= {'프', '로', '그', '래', '밍'}; 7 : byte[] myBytes= {0x4a, 0x41, 0x56, 0x41}; 8 : 9 : public void paint(Graphics g) 10 : { 11 : g.drawString("자바2", 10, 20); 12 : 13 : g.drawChars(myChars, 0, myChars.length, 10, 50); 14 : 15 : g.drawBytes(myBytes, 0, myBytes.length, 10, 80); 16 : } 17 : }
선 그리기 g.drawLine(100, 120, 400, 450); x1 y1 x2 y2 (100, 120) x1 y1 x2 y2 (100, 120) (400,450)
사각형 그리기 사각형: drawRect(), fillRect() 둥근 사각형: drawRoundRect(), fillRoundRect() 3차원 사각형: draw3DRect(), fill3DRect() g.drawRect(200, 100, 80, 50); x좌표 y좌표 폭 높이 g.drawRoundRect(200, 100, 80, 50, 60, 40); 모서리폭 모서리높이 (200,100) 80 50
타원 그리기 g.drawOval(200, 100, 80, 50); g.fillOval(200, 100, 80, 50); x좌표 y좌표 폭 높이 g.fillOval(200, 100, 80, 50); (200,100) 50 80
부채꼴 그리기 g.drawArc(50, 20, 200, 80, 20, 320); x좌표 y좌표 폭 높이 시작각도 회전각도 g.fillArc(50, 120, 200, 80, 20, 320); 90 180 270 360
다각형 그리기 int[] x1= {20, 40, 80, 250, 200}; int[] y1= {100, 50, 10, 50, 90}; g.drawPolygon(x1, y1, 5); x좌표배열 y좌표배열 점의수 int[] x2= {20, 40, 80, 250, 200}; int[] y2= {200, 150, 110, 150, 190}; g.fillPolygon(x2, y2, 5);
연결선 그리기 int[] x1= {20, 40, 80, 250, 200}; int[] y1= {100, 50, 10, 50, 90}; g.drawPolyline(x1, y1, 5); x좌표배열 y좌표배열 점의수