제 4 부 제 16 장 애플릿과 그래픽 제 17 장 이벤트 처리 제 18 장 사용자 안터페이스
16장 애플릿과 그래픽 16.1 애플릿(applet)의 개요 16.2 Applet 클래스 16.3 애플릿의 생명주기(life cycle) 16.4 애플릿의 보안 16.5 그래픽 사용 16.6 색의 사용 16.7 글꼴(font)의 사용 16.8 HTML 애플릿 태그 16.9 이미지의 사용 16.10 애플릿에서의 스레드 사용
16.1 애플릿의 개요 애플릿 프로그램 WWW 검색기나 애플릿 뷰어(appletviewer)에서 실행되는 작고 간단한 프로그램 WWW의 HTML 코드내에서 호출되어 실행 대부분의 WWW 검색기는 애플릿을 해석하여 실행할 수 있는 interpreter 내장
16.2 Applet 클래스 모든 애플릿 프로그램은 java.applet.Applet 클래스로부터 상속되어 작성되어야 한다 java.lang.Object java.awt.Component java.awt.Container java.awt.Panel java.applet.Applet
16.2 Applet 클래스 Component 클래스 : GUI 구축에 필요로 되는 많은 하위 클래스들을 가지고 있다. 약 100여개의 메소드 제공 Component 클래스의 주요 메소드 Image createImage(int width, width, height 크기의 Image 객체를 int height) 생성하여 반환 Font getFont() 현재 설정된 폰트를 폰트 객체로 반환 FontMetrics getFontMetrics(Font font) font 폰트에 관한 FontMetrics 객체를 반환 Color getForeground() 전경색(foreground)을 Color 객체로 반환 Dimension getSize() 현재 컴포넌트의 크기를 Dimension 객체로 반환 void paint(Graphics g) 현재의 컴포넌트에 Graphics 객체 g를 이용하여 그림을 그리는 메소드 void repaint() JVM에게 update() 메소드 호출을 요청한다 void setBackground(Color c) 배경색을 c로 설정 void setFont(Font f) 폰트를 f로 설정 void setForeground(Color c) 전경색을 c로 설정 public void update(Graphics g) 컴포넌트를 배경색으로 채우고 paint() 메소드를 호출한다
16.2 Applet 클래스 Container, Panel 클래스 : 다른 컴포넌트들을 담을 수 있는 클래스(18장 설명) void init() 애플릿을 초기화한다 void start() 애플릿을 시작시킨다 void stop() 애플릿을 중단한다 void destory() 애플릿을 끝낸다 URL getCodeBase() 애플릿 코드가 있는 URL 객체를 반환 URL getDocumentBase() HTML 문서가 있는 URL 객체를 반환 Image getImage(URL url) url(파일이름 포함)이 지정하는 곳에서 이미지를 가져와 Image 객체로 반환 Image getImage(URL url, url(파일이름 불 포함)이 지정하는 곳에서 imgName으로 String imgName) 지정된 이미지 파일을 가져와 Image 객체로 반환 String getParameter(String pName) 애플릿 호출시 사용한 매개변수 중에서 pName 매개변수의 값을 반환 void showStatus(String str) 검색기의 상태 라인에 str을 나타낸다
16.3 애플릿의 생명주기(lift cycle) 사용자가 작성하는 애플릿 프로그램은 생명 주기를 가진다 사용자가 작성하는 애플릿 프로그램에서 Applet 클래스의 메소드들을 오버라이딩하여 애플릿의 기본 기능 작성 import java.applet.*; public class MyApplet extends Applet { ....… public void init() { ..... } public void start() { ....... } public void stop() {....... } public void destroy() { ........ } .....… }
16.3 애플릿의 생명주기(lift cycle) 애플릿의 기본 메소드 init() : 애플릿이 로드되거나 재로드 될 때 수행. 애플릿의 초기화를 위해 사용 start() : 초기화가 끝난 애플릿을 화면에 보여주는 역할을 하는 메소드(생략가능). 애플릿 페이지를 잠시 떠났다가 다시 애플릿 페이지로 돌아왔을 때에도 start() 메소드가 수행 stop() : 사용자가 애플릿이 있는 페이지를 떠나거나 검색기를 아이콘화 하였을 때 실행되는 메소드 destory() : 검색기나 애플릿이 종료될 때 실행되는 메소드
16.3 애플릿의 생명주기(lift cycle) 애플릿에 그림을 그리고 컴포넌트들을 나타내기 위해서는 Component 클래스에서 제공되는 paint() 메소드를 오버라이딩하여 구현한다 애플릿에 그래픽을 출력하기 위한 메소드 실행 : start() 메소드가 수행된 후 애플릿을 reload 할 때 애플릿 화면을 떠났다가 다시 돌아올 때 검색기가 아이콘화 되었다가 다시 복귀될 때 일반적인 메소드들은 명시적으로 메소드를 호출하는 메시지에 의해 수행되지만, 애플릿 메소드들은 검색기에 의해 자동으로 호출
16.3 애플릿의 생명주기(lift cycle) 애플릿의 동작 init() start() stop() destroy() 처음 방문시 애플릿 페이지로 복귀 할 때 애플릿을 종료 init() start() stop() destroy() 페이지를 떠날때 paint() 애플릿의 동작 paint() 메소드는 애플릿에 그래픽을 출력하기 위한 메소드이다. start() 또는 init() 메소드에 의해 자동으로 호출되어 수행된다.
16.3 애플릿의 생명주기(lift cycle) 애플릿 프로그램의 예 /* <html> <head><title>애플릿 생성에서 실행까지</title></head> <body> <applet code="AppletExam" width=550 height=80> </applet> </body> </html> */ import java.applet.Applet; import java.awt.Graphics;
16.3 애플릿의 생명주기(lift cycle) public class AppletExam extends Applet { String temp = ""; public void init() { temp += "init()수행 "; } public void start() { temp += "start()수행 "; } public void stop() { temp += "stop()수행 "; } public void destroy() { // 애플릿이 종료될 때 호출 System.out.println("애플릿이 종료"); } public void paint(Graphics g) { g.drawString("애플릿이 생성되어 종료되기까지........",30,30); g.drawString(temp, 10, 50); }
16.3 애플릿의 생명주기(lift cycle)
16.3 애플릿의 생명주기(lift cycle) 대부분의 애플릿 응용 프로그램들은 사용자와의 상호작용을 요구한다. 사용자의 동작(event)을 받아들여 처리하는 형태의 프로그램을 이벤트 지향(event-driven) 프로그램이라 한다(391p 프로그램 참조) 자바는 이벤트 처리와 관련된 패키지를 제공하고 있다(17장)
16.4 애플릿의 보안 애플릿 프로그램들은 네트웍을 통하여 다운로드 되어 실행되므로 다음과 같은 제한을 가진다 애플릿들은 다운로드된 컴퓨터의 지역 프로그램을 실행시킬 수 없다. 애플릿들은 다운로드되는 서버가 아닌 다른 컴퓨터와의 통신은 허용하지 않는다. 애플릿들은 다운로드된 컴퓨터의 파일 시스템에 접근할 수 없다 애플릿들은 다운로드된 컴퓨터의 정보를 알 수 없다(예외 : 검색기의 버전, 운영체제의 이름과 버전, 경로 등은 알 수 있다.) JVM은 애플릿 프로그램이 클라이언트 컴퓨터의 디스크를 읽거나 쓰는 동작을 시도하면 보안(security) 관련 예외를 발생시킨다
16.4 애플릿의 보안 원격 애플릿을 지역 애플릿을 애플릿 자바 로드하는 로드하는 뷰어 응용 프로그램 넷스케이프 넷스케이프 원격 애플릿을 지역 애플릿을 애플릿 자바 로드하는 로드하는 뷰어 응용 프로그램 넷스케이프 넷스케이프 환경 제약사향 지역 파일 읽기 N N Y Y 지역 파일 쓰기 N N Y Y 파일 정보 얻기 N N Y Y 파일 삭제 N N N Y 다른 프로그램 실행 N N Y Y 다운로드된 서버와의 Y Y Y Y 네트워크 포트 연결 다른 서버와의 N Y Y Y 자바 라이브러리 로드 N Y Y Y exit의 호출 N N Y Y pop-up 창의 생성 warning Y Y Y
16.5 그래픽 사용 자바는 다양한 그래픽 기능을 제공하기 위해 java.awt.Graphics 클래스 제공 이 클래스에서 제공되는 메소드를 이용하여 다양한 형태의 그래픽을 나타낼 수 있다
16.5 그래픽 사용 Graphics 클래스의 주요 메소드 void drawArc(int x, int y, int w, startAngle과 endAngle로 지정된 각도를 int h, int startAngle, int endAngle) 가지는 원호를 그린다 void drawImage(Image img, int x, img로 지정된 이미지를 애플릿의 x,y좌표에 int y, imageObserver io) 그린다 viod drawLine(int x0, int y0, int x1, int y1) x0,y0부터 x1,y1까지 라인을 그린다 void drawOval(int x, int y, int w, int h) x,y좌표에 w,h의 폭과 높이를 가진 타원을 그린다 void drawPolygon(int x[], int y[], int n) x[]와 y[] 배열의 각 점을 좌표로 하여 n개의 코너점을 가진 다각형을 그린다 void drawRect(int x, int y, int w, int h) x,y 좌표에 w,h의 폭과 높이를 가진 사각형을 그린다 void drawString(String str, int x, int y) 문자열을 x,y 좌표에 그린다 void fillArc(int x, int y, int w, int h, 속이 찬 원호를 그린다 int startAngle, int endAngle) void fillOval(int x[], int y[], int n) 속이 찬 타원을 그린다 void fillPolygon(int x[], int y[], int n) 속이 찬 다각형을 그린다 void fillRect(int x, int y, int w, int h) 속이 찬 사각형을 그린다 Color getColor() 현재 객체의 색을 Color 객체로 반환 Font getFont() 현재 객체의 폰트를 Font 객체로 반환 FontMetrics getFontMetrics() 현재 객체의 폰트 정보를 FontMetrics 객체로 반환 void setColor(Color color) 현재 객체의 색을 color로 설정
16.5 그래픽 사용 예제 출력결과
16.5 그래픽 사용 예제 출력결과
16.5 그래픽 사용 예제 출력결과
16.5 그래픽 사용 그래픽을 애플릿의 크기에 따라 상대적인 위치에 나타내기 위해 애플릿의 크기 정보를 제공하는 Dimension 클래스를 이용 Dimension 클래스는 애플릿의 폭과 높이를 제공하는 클래스이다 생성자 Dimension(Dimension d) dimension(int w, int h) d : Dimension 객체 w,h : 애플릿의 폭과 높이
16.5 그래픽 사용 예제 출력결과
16.6 색의 사용 자바는 색에 관한 기능을 가지는 java.awt.Color 클래스를 제공 그래픽 객체에 색을 설정하기 위해서는 Color 객체를 생성한 다음 setColor() 메소드를 사용하여 설정 색을 설정하는 예 ....… public void paint(Graphics g) { ...… Color c = Color.orange; g.setColor(c); g.fillRect(100, 10, 60, 50); }
16.6 색의 사용 Color 클래스의 생성자 Color 클래스의 상수 Color(int red, int green, int blue) Color(float r, float g, float b) Color(int rgb) Color 클래스의 상수 black (0, 0, 0) blue (0, 0, 255) cyan (0, 255, 255) darkGray (64, 64, 64) gray (128, 128, 128) green (0, 255, 0) lightGray (192, 192, 192) magenta (255, 0, 255) orange (255, 200, 0) pink (255, 175, 175) red (255, 0, 0) white (255, 255, 255) yellow (255, 255, 0)
16.6 색의 사용 Color 클래스의 주요 메소드 Color brighter() 현재 객체의 색보다 한 단계 밝은 색의 Color 객체를 반환 Color darker() 현재 객체의 색보다 한 단계 어두운 색의 Color 객체를 반환 static Color decode(String str) 문자열 str과 동일한 Color 객체를 반환 throws NumberFormatException booleanequals(Object obj) 현재의 객체와 obj로 지정된 객체가 같은 색을 가지면 true, 아니면 false를 반환 int getRed() 현재 객체의 R(red)값을 반환 int getGreen() 현재 객체의 G(green)값을 반환 int getBlue() 현재 객체의 B(blue)값을 반환 int getRGB() 현재 객체의 RGB값을 반환
16.6 색의 사용 예제
16.6 색의 사용 예제
16.7 글꼴(font)의 사용 애플릿에 대한 텍스트 출력을 객체로 취급 애플릿에 텍스트를 출력하기 위해서는 Graphics 클래스의 drawString() 메소드 사용 출력되는 그래픽(텍스트)에 폰트를 지정하기 위해서는 Font 객체를 생성한 다음 setFont() 메소드를 사용하여 설정 사용 예 ......… public void paint(Graphics g) { .....… Font font = new Font("Serif", Font.ITALIC, 36); g.setFont(font); g.drawString("JAVA APPLET", 100, 50); ....… }
16.7 글꼴(font)의 사용 폰트 관련 클래스 Font 클래스 생성자 FontMetrics 클래스 생성자 Font(String name, int style, int fontsize) name : 글꼴의 이름으로서 Serif, SansSerif, Monospaced가 많이 사용 style : 상수로서 BOLD, ITALIC, PlAIN이 사용 fontsize : 글꼴의 크기 FontMetrics 클래스 생성자 FontMetrics(Font font) font : 정보를 얻고자 하는 글꼴의 이름
16.7 글꼴(font)의 사용 Font 클래스의 주요 메소드 FontMetrics 클래스의 주요 메소드 String getName() 글꼴의 이름을 반환 int getSize() 글꼴의 크기를 반환 int getStyle() 글꼴의 스타일을 반환 FontMetrics 클래스의 주요 메소드 int charWidth(char c) 문자 c의 폭을 반환 int charWidth(int i) i 값을 문자로 변환한 다음 문자의 폭을 반환 int getAscent() acent를 반환 int getDescent() descent를 반환 int getHeight() height를 반환 int getLeading() leading을 반환 int stringWidth(String str) 문자열 str의 폭을 반환
App 16.7 글꼴(font)의 사용 FontMetrics가 제공하는 글꼴 크기에 관한 정보 getAscent() 머리선 기준선 꼬리선 텍스트 다음줄 getAscent() getDescent() getHeight() getLeading()
16.7 글꼴(font)의 사용 예제
16.7 글꼴(font)의 사용 예제
16.8 HTML 애플릿 태그 애플릿을 WWW에서 사용하기 위해서는 HTML 문서내에 <APPLET> 태그를 사용하여 애플릿을 지정하여야 한다 애플릿이 포함된 HTML 문서는 대부분의 검색기나 애플릿 뷰어에 의해 수행할 수 있다
16.8 HTML 애플릿 태그 애플릿 태그 <APPLET [CODEBASE = codebaseURL] CODE = appletFile [ALT = alternateText] [NAME = appletInstanceName] WIDTH = pixels HEIGHT = pixels [ALIGN = alignment] [VSPACE = pixels] [HSPACE = pixels] > [<PARAM NAME = AttributeName1 VALUE =AttributeValue1>] [<PARAM NAME = AttributeName2 VALUE = AttributeValue2>] .....… [<PARAM NAME = AttributeNamen VALUE = AttributeValuen>] </APPLET>
16.8 HTML 애플릿 태그 CODEBASE : 애플릿 파일이 로드될 디렉토리를 지정하는 속성. 검색기는 애플릿 코드가 포함된 HTML 파일을 로드한 다음에 <APPLET>태그에서 지정된 애플릿 코드를 로드한다. 만일 CODEBASE가 지정되어 있으면 검색기는 CODEBASE에서 지정된 디렉토리로부터 애플릿 코드를 읽어 들이고, 지정되어 있지 않으면 HTML 파일이 로드된 디렉토리로부터 애플릿 코드를 읽어 들인다. CODE : 실행을 원하는 애플릿 파일을 지정 ALT : 검색기가 애플릿을 실행할 수 없을 때 나타낼 메시지를 지정하는 속성 NAME : 애플릿 객체의 이름을 지정하는 태그. 한 페이지에 여러개의 애플릿을 생성하여 애플릿간의 통신을 해야 한다면 각각의 애플릿은 이름을 가져야 한다. WIDTH와 HEIGHT : 검색기의 데이터 창에 나타낼 애플릿의 크기를 지정 VSPACE와 HSPACE : VSPACE는 애플릿의 위아래 공간을 지정하고, HSPACE는 애플릿의 양쪽옆의 공간을 지정 PARAM NAME과 VALUE : 애플릿에 넘겨줄 데이터를 지정한다. 하나의 데이터는 이름과 값으로 이루어진다. 애플릿 프로그램에서는 getParameter() 메소드를 이용하여 이 데이터 값을 가져올 수 있다.
16.8 HTML 애플릿 태그 예
16.9 이미지의 사용 Applet 클래스에서 이미지와 관련된 getImage()메소드 제공하며 이 메소드는 Image 클래스의 객체를 반환 이미지를 애플릿에 나타내기 위해서는 Graphics 클래스에서 제공하는 drawImage() 메소드를 사용하여 이미지를 나타낸다.
16.9 이미지의 사용 예
16.10 애플릿에서의 스레드 사용 애플릿 프로그램은 이미 Applet 클래스로부터 상속을 받고 있으므로 Runnable 인터페이스를 이용하여 스레드 사용 일반적으로 애플릿 스레드는 애플릿에 동적으로 그래픽을 출력하기 위해 paint() 메소드를 호출 paint() 메소드는 애플릿이 처음에 검색기나 애플릿 뷰어에 로드되거나, 또는 사용자에 의해 재로딩(reloading)이 요청되면 검색기에 의해 자동으로 호출되어 수행되는 메소드
16.10 애플릿에서의 스레드 사용 애플릿에 그래픽을 출력하는 메소드를 이해하기 위해서는 Component 클래스에서 제공되는 paint(), repaint(), update() 메소드의 기능을 이해하 여야 한다([표 16-1]참조). repaint() 메소드 : 스레드에서 애플릿이 다시 그려져야 할 필요가 있을 때는 프로그램에서 명시적으로 호출. repaint() 메소드는 JVM에게 애플릿을 다시 그릴 것을 요청하는 메소드이다. JVM은 스케줄에 따라 애플릿을 다시 그릴 것인지를 결정한 다음, update() 메소드를 호출 update() 메소드 : 현재의 애플릿을 지우고, 애플릿을 배경색으로 나타낸 다 음 paint() 메소드를 호출 paint() 메소드 : 그래픽 객체를 애플릿에 나타내는 일을 한다.
16.10 애플릿에서의 스레드 사용 예