PowerPoint 프레젠테이션

Similar documents
Microsoft PowerPoint - 12장

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

그래픽 chapter.1 스윙컴포넌트그리기 컴포넌트는자신의모양을스스로그린다 X-window, MFC, C# GUI, Android 등 GUI 플랫폼에서 GUI 컴포넌트는스스로자신의모양을그린다. 자바의스윙도예외는아니다. JButton은버튼모양을그리는코드를내장하고, JCo

8장.그래픽 프로그래밍

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

gnu-lee-oop-kor-lec10-1-chap10

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

9장.key

제8장 자바 GUI 프로그래밍 II

자바GUI실전프로그래밍2_장대원.PDF

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63138C0E520C0CCBAA5C6AE20C3B3B8AE28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

11장.key

PowerPoint Presentation

Microsoft PowerPoint - java1-lecture11.ppt [호환 모드]

public class FlowLayoutPractice extends JFrame { public FlowLayoutPractice() { super("flowlayout Practice"); this. Container contentpane = getcontentp

10장.key

(Microsoft PowerPoint - ETRSRHFRXNAM.ppt [\310\243\310\257 \270\360\265\345])

05-class.key

No Slide Title

<4D F736F F F696E74202D20C1A63230C0E520BDBAC0AE20C4C4C6F7B3CDC6AE203128B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

Microsoft PowerPoint - Java-03.pptx

No Slide Title

10-Java Applet

Design Issues

강의자료

Microsoft PowerPoint - 04-UDP Programming.ppt

PowerPoint Presentation

10 이벤트 처리와 그래픽 프로그래밍.key

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

Microsoft PowerPoint - 14주차 강의자료

Cluster management software

gnu-lee-oop-kor-lec06-3-chap7

Java Programing Environment

PowerPoint Presentation

Microsoft PowerPoint - EEL2 Lecture10 -Swing and Event Handling.pptx

PowerPoint Presentation

제11장 프로세스와 쓰레드

오버라이딩 (Overriding)

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint Presentation

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - Java7.pptx

슬라이드 1

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Microsoft PowerPoint - ÀÚ¹Ù08Àå-2.ppt

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - 2강

PowerPoint Presentation

Microsoft PowerPoint - [JAVA프로그래밍]9장GUI

(Microsoft PowerPoint - LZVNQBAJWGTC.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint 자바-AWT컴포넌트(Ch8).pptx

PowerPoint 프레젠테이션

(Microsoft PowerPoint - java2-lecture6.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint 프레젠테이션

PowerPoint Presentation

슬라이드 1

JAVA PROGRAMMING 실습 09. 예외처리

Microsoft PowerPoint - 06-Chapter09-Event.ppt

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

슬라이드 1

JTable과 MVC(Model-View-Controller) 구조 - 모델-뷰-컨트롤러구조는데이터의저장과접근에대한제공은모델이담당하고, 화면표시는뷰, 이벤트의처리는컨트롤러가하도록각역할을구분한구조이다. 즉, 역할의분담을통하여상호간의영향을최소화하고각요소의독립성을보장하여독자

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Cluster management software

Network Programming

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 05. 객체의 활용

DB 에데이터저장을위한입력창설계 - JLabel, JTextField, JButton 을이용한입력창설계 - 2 -

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

Microsoft PowerPoint - java2-lecture6.ppt [호환 모드]

09-interface.key

Microsoft PowerPoint - Lect04.pptx

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

연습문제이론홀수정답

02 C h a p t e r Java

Microsoft Word - java18-1-final-answer.doc

PowerPoint 프레젠테이션

5장.key

PowerPoint 프레젠테이션

01-OOPConcepts(2).PDF

제목

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 6-PythonGUI-sprite

PowerPoint Presentation

Microsoft PowerPoint - logo_2-미해답.ppt [호환 모드]

PowerPoint Presentation

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

슬라이드 1

Transcription:

그래픽 배효철 th1g@nate.com 1

목차 스윙컴포넌트그리기 자바의그래픽좌표시스템 Graphics 2

스윙컴포넌트그리기 스윙의그리기기본철학 모든컴포넌트는자신의모양을스스로그린다. 컨테이너는자신을그린후자식들에게그리기지시 public void paintcomponent(graphics g) 스윙컴포넌트가자신의모양을그리는메소드 JComponent 의메소드 모든스윙컴포넌트가이메소드를가지고있음 컴포넌트가그려져야하는시점마다호출 크기가변경되거나, 위치가변경되거나컴포넌트가가려졌던것이사라지는등 Graphics 객체 java.awt.graphics 컴포넌트그리기에필요한도구를제공하는객체 색지정, 도형그리기, 클리핑, 이미지그리기등의메소드제공 사용자가원하는모양을그리고자할때 paintcomponent(graphic g) 를오버라이딩하여재작성 3... 필요한그리기코드작성

JPanel 을상속받아도형그리기 JPanel 의용도 사용자가그래픽을통해다양한 UI를창출하는일종의캔버스 import javax.swing.*; import java.awt.*; public class paintjpanelex extends JFrame { Container contentpane; paintjpanelex() { settitle("jpanel paintcomponent 예제 "); setdefaultcloseoperation(jframe.exit_on_close); contentpane = getcontentpane(); MyPanel panel = new MyPanel(); contentpane.add(panel, BorderLayout.CENTER); setsize(250,200); setvisible(true); (10,10) 50x50크기 (50,50) (90,90) 파란색사각형 class MyPanel extends JPanel { g.setcolor(color.blue); g.drawrect(10,10, 50, 50); g.drawrect(50,50, 50, 50); g.drawrect(90,90, 50, 50); 4 public static void main(string [] args) { new paintjpanelex();

자바의그래픽좌표시스템 (0,0) X 축 Y 축 x (x,y) y 5

Graphics Graphics 의기능 색상선택하기 문자열출력 도형그리기 도형칠하기 이미지출력 클리핑 문자열출력을위한 Graphics 메소드 void drawstring(string str, int x, int y) str 문자열을 (x,y) 영역에출력한다. 이때컨텍스트내의현재색과현재폰트로출력한다. 6

drawstring() JPanel을상속받아 paintcomponent() 를 오버라이딩하고 drawstring() 메소드를 사용하여다음그림과같이패널내의 (30, 30) 과 (60, 60) 에각각문자열을 출력하는스윙프로그램을작성하라. import javax.swing.*; import java.awt.*; public class GraphicsDrawStringEx extends JFrame { Container contentpane; GraphicsDrawStringEx() { settitle("drawstring 사용예제 "); setdefaultcloseoperation(jframe.exit_on_close); contentpane = getcontentpane(); MyPanel panel = new MyPanel(); contentpane.add(panel, BorderLayout.CENTER); setsize(250,200); setvisible(true); class MyPanel extends JPanel { g.drawstring(" 자바는재밌다.~~", 30,30); g.drawstring(" 얼마나? 하늘만큼땅만큼!!!!", 60, 60); public static void main(string [] args) { new GraphicsDrawStringEx(); 7

Color 와 Font 클래스 Color 하나의색을표현하는클래스 Red, Green, Blue 의 3 성분으로구성 각성분의크기는 0-255(8 비트 ) 생성자 Color(int r, int g, int b) red(r), green(g), blue(b) 값, srgb 색생성 new Color(255, 0, 0) ; // 완전빨강색 Color(int rgb) rgb 정수값은총 32 비트중하위 24 비트만이유효하고 0x00rrggbb 로표현 하위 8 비트는 blue, 그다음상위 8 비트는 green, 그다음 8 비트는 blue 성분 new Color(0x0000ff00); // 완전초록 다른방법 Color.BLUE 등의 static 상수활용 8 Graphics g; g.setcolor(new Color(255, 0, 0)); g.setcolor(new Color(0x0000ff00)); g.setcolor(color.yellow); // 빨간색을그래픽색으로설정 // 초록색을그래픽색으로설정 // 노란색을그래픽색으로설정

Color 와 Font 클래스 Font 폰트를표현하는클래스 생성자 Font(String fontface, int style, int size) fontface 는 " 고딕체 ", "Arial" 등 style 은 Font.BOLD, Font.ITALIC, Font.PLAIN 중하나 size 는픽셀단위의크기 Graphics 객체에서색상과폰트설정 void setcolor(color color) 칠할색을 color 로지정 void setfont(font font) 폰트를 font 로지정 Graphics g; Font f = new Font("Arial", Font.ITALIC, 30); g.setfont(f); g.setcolor(color.red); g.drawstring("how much", 30,30); 9

문자열그리기 import javax.swing.*; import java.awt.*; public class GraphicsColorFontEx extends JFrame { Container contentpane; GraphicsColorFontEx() { settitle("color, Font 사용예제 "); setdefaultcloseoperation(jframe.exit_on_close); contentpane = getcontentpane(); MyPanel panel = new MyPanel(); contentpane.add(panel, BorderLayout.CENTER); setsize(350, 450); setvisible(true); class MyPanel extends JPanel { g.setcolor(color.blue); g.drawstring("i Love Java.~~", 30,30); g.setcolor(new Color(255, 0, 0)); g.setfont(new Font("Arial", Font.ITALIC, 30)); g.drawstring("how much?", 30, 60); g.setcolor(new Color(0x00ff00ff)); for(int i=1; i<=5; i++) { g.setfont(new Font("Jokerman", Font.ITALIC, i*10)); g.drawstring("this much!!", 30, 60+i*60); 10 public static void main(string [] args) { new GraphicsColorFontEx();

도형그리기 void drawline(int x1, int y1, int x2, int y2) (x1,y1) 에서 (x2,y2) 까지선을그린다. void drawoval(int x1, int y1, int w, int h) (x1,y1) 에서 wxh 크기의사각형에내접하는타원그린다. void drawrect(int x1, int y1, int w, int h) (x1,y1) 에서 wxh 크기의사각형을그린다. void drawroundrect(int x1, int y1, int w, int h, int arcwidth, int archeight) (x1,y1) 에서 wxh 크기의사각형을그리고, 4 개의모서리는원으로처리 arcwidth 는모서리의원수평반지름, archeight 는수직반지름 11

class MyPanel extends JPanel { g.setcolor(color.red); g.drawline(20,20,80,80); class MyPanel extends JPanel { g.setcolor(color.red); g.drawoval(20,20,80,80); class MyPanel extends JPanel { g.setcolor(color.red); g.drawrect(20,20,80,80); 12 class MyPanel extends JPanel { g.setcolor(color.red); g.drawroundrect(20,20,120,80,40,60);

도형칠하기 도형칠하기 도형을그리고내부를칠하는기능 도형의외곽선과내부를따로칠하는기능은없다. 도형칠하기를위한메소드 도형그리기메소드명에서 draw 를 fill 로대치하면된다. 인자는동일 예 ) drawrect() -> fillrect(), drawarc() -> fillarc() 칠하기메소드 void filloval(int x1, int y1, int w, int h) void fillrect(int x1, int y1, int w, int h) void fillroundrect(int x1, int y1, int w, int h, int arcwidth, int archeight) void fillarc(int x, int y, int w, int h, int startangle, int arcangle) void fillpolygon(int []x, int []y, int n) 13

스윙의페인팅메카니즘 스윙컴포넌트들이그려지는과정에대한이해필요 레고블럭이아래서부터쌓이듯이, 바탕부터한컴포넌트씩그려짐 바탕컨테이너부터그려짐 ( 다음슬라이드참고 ) JComponent.paint() 컴포넌트자신과모든자손그리기 JComponent.paint() 는다음메소드를순서대로호출 JComponent.paintComponent() 컴포넌트자신의모양그리기 JComponent.paintBorder() 컴포넌트의외곽그리기 JComponent.paintChildren() 컴포넌트의자식들그리기 개발자가 paintcomponent() 를직접호출하면안됨 paintcomponent() 는페인팅메카니즘에의해자동으로호출됨 14

컨테이너 paint() paintcomponent() paintborder() paintchildren() 자식컨테이너 자식컨테이너 paint() paintcomponent() paintborder() paintchildren() 자식컴포넌트 paint() paintcomponent() paintborder() paintchildren() 자식컴포넌트 paint() paintcomponent() paintborder() paintchildren() paint() paintcomponent() paintborder() paintchildren() 자식컴포넌트 paint() paintcomponent() paintborder() paintchildren() 15

repaint() Component 의메소드 repaint() 는응용프로그램에서호출하는메소드 repaint() 를호출해야하는경우 개발자가컴포넌트를다시그리고자하는경우 프로그램내에서컴포넌트의모양과위치를변경하였지만바로화면에반영되지않는다. 컴포넌트가다시그려져야그때변경된위치에변경된모양으로출력됨 repaint() 는자바플랫폼에게지금당장컴포넌트를다시그리도록지시함 repaint() 의호출에의해, 컴포넌트의 paintcomponent() 가호출됨 component.repaint(); 부모컴포넌트부터다시그리는것이좋음 컴포넌트의위치가변경된경우 repaint() 가불려지면이컴포넌트는새로운위치에다시그려지지만이전의위치에있던자신의모양이남아있기때문에부모컴포넌트의 repaint() 를호출하는것이좋음 component.getparent().repaint(); 16

마우스를이용한선그리기 import javax.swing.*; import java.awt.*; import java.util.*; import java.awt.event.*; public class GraphicsDrawLineMouseEx extends JFrame { Container contentpane; GraphicsDrawLineMouseEx() { settitle("drawing Line by Mouse 예제 "); setdefaultcloseoperation(jframe.exit_on_close); contentpane = getcontentpane(); MyPanel panel = new MyPanel(); contentpane.add(panel, BorderLayout.CENTER); setsize(300, 300); setvisible(true); public static void main(string [] args) { new GraphicsDrawLineMouseEx(); 17 class MyPanel extends JPanel { Vector<Point> vs = new Vector<Point>(); Vector<Point> ve = new Vector<Point>(); Point startp = null; Point endp = null; public MyPanel() { addmouselistener(new MouseAdapter(){ public void mousepressed(mouseevent e) { startp = e.getpoint(); public void mousereleased(mouseevent e) { endp = e.getpoint(); vs.add(startp); ve.add(endp); repaint(); ); g.setcolor(color.blue); for(int i=0; i<vs.size(); i++) { Point s = vs.elementat(i); Point e = ve.elementat(i); g.drawline((int)s.getx(), (int)s.gety(), (int)e.getx(), (int)e.gety());

새로운버튼생성예 import javax.swing.*; import java.awt.*; public class paintcomponentex extends JFrame { Container contentpane; paintcomponentex() { settitle("paintcomponent 사용예제 "); setdefaultcloseoperation(jframe.exit_on_close); contentpane = getcontentpane(); contentpane.setlayout(new FlowLayout()); MyButton b = new MyButton("New Button"); b.setopaque(true); b.setbackground(color.cyan); contentpane.add(b); setsize(250,200); setvisible(true); class MyButton extends JButton { MyButton(String s) { super(s); g.setcolor(color.red); g.drawoval(0,0,this.getwidth()-1, this.getheight()-1); public static void main(string [] args) { new paintcomponentex(); 18