윈도우프레임 도형그리기색과폰트이미지그리기그리기응용 2
윈도우프레임 제목표시줄을갖는윈도우를의미 생성과정 1 JFrame 객체생성 2 프레임의크기설정 3 프레임의제목설정 4 기본닫힘연산지정 5 프레임이보이도록만듦. 3
윈도우프레임예제 [ 예제 8.1 - EmptyFrameViewer.java] import javax.swing.*; public class EmptyFrameViewer { public static void main(string[] args) { JFrame frame = new JFrame(); // 1 final int FRAME_WIDTH = 300; final int FRAME_HEIGHT = 400; frame.setsize(frame_width, FRAME_HEIGHT); frame.settitle("an Empty Frame"); frame.setdefaultcloseoperation(jframe.exit_on_close); // 2 // 3 // 4 frame.setvisible(true); // 5 4
그래픽객체 자바의그래픽기능을위해제공되는객체 java.awt.graphics 클래스의객체 선, 사각형, 타원, 호, 다각형등과같은도형을그리는데필요한기본적인메소드를가지고있음 JComponent 클래스의 paintcomponent() 메소드를재정의하여얻음화면을다시그려야할때, 자바에의해호출되는메소드 class UserDefinedComponent extends JComponent { public void paintcomponent(graphics g) { // 그래픽객체를이용한그리기작업 5
그리기과정 1 윈도우프레임을만듦 2 컴포넌트클래스의객체를생성 UserDefinedComponent component = new UserDefinedComponent(); 3 컴포넌트객체를윈도우프레임에추가 frame.add(component); 또는 frame.getcontentpane().add(component); 4 윈도우프레임을보이도록만듦 6
사각형그리기예제 [ 예제 8.2 - DrawingSchemeViewer.java] import java.awt.*; import javax.swing.*; class UserDefinedComponent extends JComponent { public void paintcomponent(graphics g) { g.drawrect(10, 20, 200, 150); public class DrawingSchemeViewer { public static void main(string[] args) { JFrame frame = new JFrame(); // 그리기를위한클래스 // 보여주기위한클래스 // 1 frame.setsize(320, 240); frame.settitle(" 사각형그리기 "); frame.setdefaultcloseoperation(jframe.exit_on_close); UserDefinedComponent component = new UserDefinedComponent(); // 2 frame.add(component); // 3 frame.setvisible(true); // 4 7
사각형그리기실행결과 8
형식 void drawline(start x, start y, end x, end y ) 예제 g.drawline(20, 20, 80, 80); g.drawline(70, 20, 40, 60); 9
종류 사각형, 둥근모서리사각형, 3차원사각형외각선만그리는 drawrect() 메소드채워진사격형을그리는 fillrect() 메소드 일반사각형그리기 형식 void drawrect(start x, start y, width, height) void fillrect(start x, start y, width, height) 예제 g.drawrect(20, 20, 50, 50); g.fillrect(80, 20, 50, 50); 10
둥근모서리사각형그리기 형식 void drawroundrect(start x, start y, w, h, arc_w, arc_h) void fillroundrect(start x, start y, w, h, arc_w, arc_h) 예제 g.drawroundrect(20, 20, 50, 50, 20, 20); g.fillroundrect(80, 20, 50, 50, 20, 20); 11
3 차원사각형그리기 형식 void draw3drect(start x, start y, width, height, raised) void fill3drect(start x, start y, width, height, raised) raised 값이 true 이면, 볼록한 3 차원사각형을그림 raised 값이 false 이면, 오목한 3 차원사각형을그림 예제 g.draw3drect(20, 20, 50, 50, true); g.fill3drect(80, 20, 50, 50, false); 12
원과타원그리기 drawoval() 메소드와 filloval() 메소드사각형을그리는매개변수와같음원을그리기위해서는정사각형의좌표값을줌타원을그리기위해서는직사각형의좌표값을줌 g.drawoval(20, 20, 50, 50); g.filloval(80, 20, 50, 80); 13
호그리기 drawarc() 메소드와 fillarc() 메소드 4개의매개변수는원이나타원을그리기위한매개변수값과같음 5번째매개변수는호를그리기위한시작각 6번째매개변수는호의중심각 g.drawarc(20, 20, 50, 50, 90, 180); g.fillarc(80, 20, 50, 80, 45, 90); 14
다각형그리기 각모서리점들의집합으로표현 형식 void drawpolygon(polygon p) void drawpolygon(int[] xpoints, int[] ypoints, int npoints) 예제 Polygon p = new Polygon(); p.addpoint (30, 30); p.addpoint (5, 50); p.addpoint (40, 75); p.addpoint (70, 20); p.addpoint (35, 10); g.drawpolygon(p); int[] xpnts = {90, 65, 100, 130, 95; int[] ypnts = {30, 50, 75, 20, 10; int npnts = xpnts.length; g.drawpolygon(xpnts, ypnts, npnts); 15
텍스트그리기 형식 void drawstring(string s, int x, int y) 예제 g.drawstring("java Graphic", 10, 10); 16
색 java.awt.color 패키지의 Color 클래스의객체를사용 RGB(Red/Green/Blue) 색상모델을사용 Color magenta = new Color(1.0F, 0.0F, 1.0F); 색을지정하기위해서는그래픽객체의 setcolor() 메소드를사용 Color 클래스의객체나 Color 클래스에서지원하는색상수 g.setcolor(color.magenta); 또는 g.setcolor(color.magenta); 17
폰트 글자의폰트를지정하기위해서는 java.awt 패키지에서제공하는 Font 클래스를사용생성자를통해폰트의종류와스타일, 그리고폰트크기를지정 폰트의종류 Helvetica, TimesRoman, Courier, Dialog, DialogInput, ZapfDingbats, default 폰트의스타일 Font.PLAIN, Font.ITALIC, Font.BOLD, Font.BOLD+Font.ITALIC 예제 Font f = new Font("TimesRoman", Font.BOLD+Font.ITALIC, 30); 그래픽객체의 setfont() 메소드를사용하여폰트를지정 18
[ 예제 8.3 - FontAndColorViewer.java] import java.awt.*; import javax.swing.*; class FontAndColorComponent extends JComponent { public void paintcomponent(graphics g) { Font fp = new Font("TimesRoman", Font.PLAIN, 17); Font fb = new Font("Helvetica", Font.BOLD, 17); Font fi = new Font("Courier", Font.ITALIC, 17); Font fbi = new Font("Dialog", Font.BOLD+Font.ITALIC, 17); g.setfont(fp); g.setcolor(color.black); g.drawstring("font:timesroman, Style:Plain, Color:Black", 10, 22); g.setfont(fb); g.setcolor(color.red); g.drawstring("font:helvetica, Style:Bold, Color:Red", 10, 44); g.setfont(fi); g.setcolor(color.blue); g.drawstring("font:courier, Style:Italic, Color:Blue", 10, 66); g.setfont(fbi); g.setcolor(color.green); g.drawstring("font:dialog, Style:Bold+Italic, Color:GREEN", 10, 88); 19
[ 예제 8.3 - FontAndColorViewer.java] (cont.) public class FontAndColorViewer { public static void main(string[] args) { JFrame frame = new JFrame(); frame.setsize(480, 270); frame.settitle("fontandcolor"); frame.setdefaultcloseoperation(jframe.exit_on_close); FontAndColorComponent component = new FontAndColorComponent(); frame.add(component); frame.setvisible(true); 20
실행결과 21
이미지읽기 javax.imageio 패키지에있는 ImageIO 클래스를이용 형식 static BufferedImage read(file input) static BufferedImage read(url input) 예제 try { Image img = ImageIO.read(new File("image.jpg")); // 이미지와관련된작업수행. catch (IOException e) { // IOException 에대한예외처리. 22
이미지그리기 형태 void drawimage(image img, int x, int y, ImageObserver observer) void drawimage(image img, int x, int y, int w, int h, ImageObserver observer) void drawimage(image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) 23
이미지를읽어오는클래스 [ 예제 8. 4 - DrawImageViewer.java] import java.awt.*; import java.awt.image.bufferedimage; import javax.swing.*; import java.io.*; import javax.imageio.imageio; class ImageDrawingComponent extends JComponent { public void paintcomponent(graphics g) { try { Image img; img = ImageIO.read(new File("image.jpg")); g.drawimage(img, 0, 0, null); catch (IOException e) { 24
읽어온이미지를그리는클래스 [ 예제 8. 4 - DrawImageViewer.java] (cont.) public class DrawImageViewer { public static void main(string[] args) { JFrame frame = new JFrame(); frame.setsize(320, 240); frame.settitle("drawimagetest"); frame.setdefaultcloseoperation(jframe.exit_on_close); ImageDrawingComponent component = new ImageDrawingComponent(); frame.add(component); frame.setvisible(true); 25
집그리기 예제 8.5: HouseViewer.java 26
집그리기예제 ( 주요그리기부분코드 ) [ 예제 8. 5 - HouseViewer.java] class HouseDrawingComponent extends JComponent { public void paintcomponent(graphics g) { // 단계 1: 지붕을그린다. int[] xpnts = {100, 50, 150, 100; int[] ypnts = {30, 180, 180, 30; int npnts = xpnts.length; g.fillpolygon(xpnts, ypnts, npnts); // 지붕위의기와모양을그린다. g.setcolor(color.white); g.drawarc(90, 50, 20, 40, 210, 120); g.drawarc(75, 87, 20, 40, 210, 120); g.drawarc(105, 87, 20, 40, 210, 120); g.drawarc(60, 125, 20, 40, 210, 120); g.drawarc(90, 125, 20, 40, 210, 120); g.drawarc(120, 125, 20, 40, 210, 120); 27
집그리기예제 ( 주요그리기부분코드 ) [ 예제 8. 5 - HouseViewer.java (cont.) // 단계 2: 몸체를그린다. g.setcolor(color.black); g.drawrect(60, 180, 80, 100); // 반원모양의창문을그린다. g.setcolor(color.yellow); g.fillarc(80, 195, 40, 85, 0, 180); // 노란색창문주위를 2 개의검은색선으로그린다. g.setcolor(color.black); g.drawarc(80, 195, 40, 85, 0, 180); g.drawarc(79, 195, 42, 86, 0, 180); g.drawline(79, 238, 120, 238); g.drawline(79, 239, 120, 239); 28
시계그리기 예제 8.6: ClockViewer.java 29
시계그리기예제 ( 주요그리기부분코드 ) [ 예제 8. 6 - ClockViewer.java] class ClockDrawingComponent extends JComponent { public void paintcomponent(graphics g) { Polygon hp = new Polygon(); Polygon mp = new Polygon(); // 시계바깥원 g.setcolor(color.red); g.filloval(20, 20, 150, 150); // 시계안쪽원 g.setcolor(color.yellow); g.filloval(40, 40, 110, 110); // 중심원 g.setcolor(color.black); g.filloval(92, 92, 6, 6); 30
시계그리기예제 ( 주요그리기부분코드 ) [ 예제 8. 6 - ClockViewer.java] (cont.) // 시침 hp.addpoint(92, 95); hp.addpoint(95, 55); hp.addpoint(98, 95); g.setcolor(color.blue); g.fillpolygon(hp); // 분침 mp.addpoint(95, 92); mp.addpoint(140, 95); mp.addpoint(95, 98); g.fillpolygon(mp); // 초침 g.setcolor(color.red); g.drawline(105, 85, 60, 120); 31