Power Java 제 23 장그래픽프로그래밍 이번장에서학습할내용 자바에서의그래픽 기초사항 기초도형그리기 색상 폰트 Java 2D Java 2D를이용한그리기 Java 2D 를이용한채우기 도형회전과평행이동 자바를이용하여서화면에그림을그려봅시다.
자바그래픽데모 자바그래픽의두가지방법 자바그래픽 AWT Java 2D AWT를사용하면기본적인도형들을쉽게그릴수있다. 어디서나잘실행된다. 커브를그릴수있다. 2차원도형을회전 앤티에일리어싱 그라디언트채우기
간단한 문자열출력 직선 어디에그릴것인가? JFrame 이나 JPanel 에도그릴수있지만우리나름대로의컴포넌트를정의하여보자. 이것을상속받아서우리나름대로의컴포넌트를정의한다.
어떻게그릴것인가? 컴포넌트에무언가를그리려면 paint() 메소드를중복정의한다. paint() 메소드는컴포넌트가화면에그려질때호출된다. 일반적인코드의형태 class MyComponent extends JComponent { public void paint(graphics g) { // 여기에그림을그리는코드를넣는다.
구체적인코드 class MyComponent extends JComponent { public static final int x = 30; public static ti final int y = 80; 문자열출력 public void paint(graphics g) { g.drawstring(" 안녕하세요? 자바프로그래머여러분!", x, y); g.drawline(x, y + 10, x + 200, y + 10); 직선출력 그래픽좌표계
import java.awt.*; import javax.swing.*; // 그림이그려지는컴포넌트를정의 class MyComponent extends JComponent { public static final int x = 30; public static final int y = 80; public void paint(graphics g) { g.drawstring(" 안녕하세요? 자바프로그래머여러분!", x, y); ) g.drawline(x, y + 10, x + 200, y + 10); // 프레임컴포넌트를상속받아서정의 public class MyFrame extends JFrame { public static final int WIDTH = 300; public static final int HEIGHT = 200; public MyFrame() { settitle("myframe"); ") setsize(width, HEIGHT); setdefaultcloseoperation(jframe.exit_on_close); setvisible(true); // MyComponent 객체생성하여프레임에추가 MyComponent c = new MyComponent(); add(c); public static void main(string[] args) { MyFrame frame = new MyFrame();
실행결과 기초도형그리기
직선그리기 사각형그리기 width height
drawroundrect() 타원그리기
호그리기 아래그림과비슷한얼굴을그려보자
import javax.swing.*; import java.awt.event.*; import java.awt.*; class MyComponent extends JComponent { public void paint(graphics g) { g.setcolor(color.yellow); g.filloval(20, 30, 200, 200); g.setcolor(color.black); // 왼쪽눈을그린다. g.drawarc(60, 80, 50, 50, 180, -180); // 오른쪽눈을그린다. g.drawarc(150, 80, 50, 50, 180, -180); // 입을그린다. g.drawarc(70, 130, 100, 70, 180, 180); public class SnowManFace extends JFrame { public SnowManFace() { setsize(280, 300); setdefaultcloseoperation(jframe.exit_on_close); settitle(" 눈사람얼굴 "); setvisible(true); add(new MyComponent()); public static void main(string[] args) { SnowManFace s=new SnowManFace();
색상 java.awt 패키지의일부인 Color 클래스를사용 빛의 3 원색인 Red 성분, Green 성분, Blue 성분이얼마나함유되어있는지를 0 에서 255 까지의수를사용하여나타낸다. import javax.swing.*; import java.awt.event.*; import java.awt.*; class MyPanelextends JPanel implements ActionListener { JButton button; Color color = new Color(0, 0, 0); public MyPanel() { setlayout(new BorderLayout()); button = new JButton(" 색상변경 "); button.addactionlistener(this); add(button, BorderLayout.SOUTH); public void paint(graphics g) { g.setcolor(color); g.fillrect(10, 10, 210, 220);
public void actionperformed(actionevent e) { color = new Color((int) (Math.random()*255.0), (int) (Math.random()*255.0),(int) (Math.random()*255.0)); repaint(); public class ColorTest extends JFrame { public ColorTest() { setsize(240, 300); setdefaultcloseoperation(jframe.exit_on_close); settitle("color Test"); setvisible(true); ibl JPanel panel = new MyPanel(); add(panel); public static void main(string[] args) { ColorTest s = new ColorTest(); 실행결과
색상선택기 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.colorchooser.*; public class ColorChooserTest Ch extends JFrame implements ChangeListener { protected JColorChooser color; public ColorChooserTest() { settitle(" 색상선택기테스트 "); setdefaultcloseoperation(jframe.exit_on_close); 록 color = new JColorChooser(); // 생성자호출 color.getselectionmodel().addchangelistener(this); // 리스너등 color.setborder(borderfactory.createtitledborder(" 색상선택 "));
JPanel panel = new JPanel(); panel.add(color); add(panel); pack(); this.setvisible(true); public void statechanged(changeevent e) { Color newcolor = color.getcolor(); public static void main(string[] args) { new ColorChooserTest(); Ch 폰트 폰트를지정하기위해서는 Font 클래스를사용 Font 객체는폰트이름 (Courier, Helvetica,..) 과스타일 (plain, bold, italic,...), 크기 (12 포인트,...) 의 3 가지속성 Font font = new Font("Courier", Font.PLAIN, 10); // plain 형식이고크기는 10 포인트
폰트의종류 import javax.swing.*; import java.awt.event.*; import java.awt.*; class MyComponent extends JComponent { Font f1, f2, f3, f4, f5; public MyComponent() { f1 = new Font("Serif", Font.PLAIN, 20); f2 = new Font("San Serif", Font.BOLD, 20); f3 = new Font("Monospaced", Font.ITALIC, 20); f4 = new Font("Dialog", Font.BOLD Font.ITALIC, 20); f5 = new Font("DialogInput", Font.BOLD, 20); public void paint(graphics g) { g.setfont(f1); g.drawstring("serif 20 points PLAIN", 10, 50); g.setfont(f2); g.drawstring("sanserif 20 points BOLD", 10, 70); gsetfont(f3); g.setfont(f3); g.drawstring("monospaced 20 points ITALIC", 10, 90); g.setfont(f4); g.drawstring("dialog 20 points BOLD + ITALIC", 10, 110); g.setfont(f5); g.drawstring("dialoginput 20 points BOLD", 10, 130);
public class FontTest extends JFrame { public FontTest() { setsize(500, 200); setdefaultcloseoperation(jframe.exit_on_close); ON CLOSE); settitle("font Test"); setvisible(true); JPanel panel = new MyPanel(); add(panel); public static void main(string[] args) { FontTest s = new FontTest(); Java 2D
Java 2D 를이용한그리기 public void paint(graphics g) { Graphics2D g2 = (Graphics2D) g; g2.drawline(100, 100, 300, 300); g2.drawrect(10, 10, 100, 100);... Java 2D 를이용한그리기
사각형그리기 Shape r1 = new Rectangle2D.Float(10, 10, 50, 60); g2.draw(r1); import java.util.*; import javax.swing.*; import java.awt.event.*; awt import java.awt.*; import java.awt.geom.*; public class MoreShapes extends JFrame { public MoreShapes() { setsize(600, 130); settitle("java 2D Shapes"); setdefaultcloseoperation(jframe.exit_on_close); JPanel panel = new MyPanel(); add(panel); setvisible(true); public static void main(string[] args) { new MoreShapes();
class MyPanel extends JPanel { ArrayList<Shape> shapearray = new ArrayList<Shape>(); public MyPanel() { Shape s; // 사각형 s = new Rectangle2D.Float(10, 10, 70, 80); shapearray.add(s); // 둥근사각형 s = new RoundRectangle2D.Float(110, 10, 70, 80, 20, 20); shapearray.add(s); // 타원 s = new Ellipse2D.Float(210, 10, 80, 80); shapearray.add(s); (); // 원호 : Arc2D.OPEN s = new Arc2D.Float(310, 10, 80, 80, 90, 90, Arc2D.OPEN); shapearray.add(s); add(s); // 원호 Arc2D.CHORD s = new Arc2D.Float(410, 10, 80, 80, 0, 180, Arc2D.CHORD); shapearray.add(s); add(s); // 원호 Arc2D.PIE s = new Arc2D.Float(510, 10, 80, 80, 45, 90, Arc2D.PIE); shapearray.add(s); public void paint(graphics g) { Graphics2D g2 = (Graphics2D) g; // 앤티에일리어싱을설정한다. g2.setrenderinghint(renderinghints.key_antialiasing, RenderingHints.VALUE_ANTIALIAS_ON); g2.setcolor(color.black); g2.setstroke(new BasicStroke(3)); for (Shape s : shapearray) g2.draw(s);
Q & A