paintComponent() 메소드
모든 스윙 컴포넌트가 가지고 있는 메소드로서, 스윙 컴포넌트가 자신의 내부를 그리는 paintComponent() 메소드의 원형은 다음과 같다.
void paintComponent(Graphics g); // 컴포넌트의 내부 모양을 그린다. |
paintComponent() 는 JComponent의 추상 메소드이다.
Graphics 객체는 java.awt.Graphics로서 AWT 패키지에 속해 있다.
JPanel에 그리기
JPanel은 빈 캔버스와 같이 아무 모양도 없는 빈 켄테이너로서, 다양한 GUI를 창출할 수 있는 캔버스로 적합하기 때문에 그래픽을 위해 많이 사용된다. JPanel에 그리기를 수행하는 예를 살펴보자.
class MyPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); // JPanel의 paintComponent() 호출 g.setColor(Color.BLUE); // 파란색 선택 g.drawRect(10,10,50,50); // (10,10) 위치에 50x50 크기의 사각형 그리기 g.drawRect(60,70,50,50); // (60,70) 위치에 50x50 크기의 사각형 그리기 g.drawRect(110,130,50,50); // (110,130) 위치에 50x50 크기의 사각형 그리기 } } |
JPanel을 상속받아 도형 그리기
import javax.swing.*; import java.awt.*;
public class paintJPanelEx extends JFrame { private MyPanel panel = new MyPanel();
public paintJPanelEx() { setTitle("JPanel의 paintComponent() 예제"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setContentPane(panel); // 생성한 panel 패널을 컨텐트팬으로 사용
setSize(230,250); setVisible(true); }
// JPanel을 상속받는 새 패널 작성 class MyPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); // JPanel의 paintComponent() 호출 g.setColor(Color.BLUE); // 파란색 선택 g.drawRect(10,10,50,50); // (10,10) 위치에 50x50 크기의 사각형 그리기
g.setColor(Color.ORANGE); // 파란색 선택 g.drawRect(60,70,50,50); // (50,50) 위치에 50x50 크기의 사각형 그리기
g.setColor(Color.MAGENTA); // 마젠타색 선택 g.drawRect(110,130,50,50); // (90,90) 위치에 50x50 크기의 사각형 그리기 } }
public static void main(String [] args) { new paintJPanelEx(); } } |
문자열 그리기
void drawString(String str, int x, int y); // str 문자열을 (x, y)영역에 그린다. 현재 Graphice에 설정된 색과 폰트로 문자열 출력 |
drawString() 메소드를 이용하여 문자열 출려하기
import javax.swing.*; import java.awt.*;
public class GraphicsDrawStringEx extends JFrame { private MyPanel panel = new MyPanel();
public GraphicsDrawStringEx() { setTitle("drawString 사용 예제"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setContentPane(panel); // 생성한 panel 패널을 컨텐트팬으로 사용
setSize(250,200); setVisible(true); }
// JPanel을 상속받는 새 패널 작성 class MyPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); g.drawString("자바 프로그래밍", 30,30); // 패널의 (30,30) 위치에 문자열 출력 g.drawString("GUI로 도형그리기", 60, 60); // 패널의 (60,60) 위치에 문자열 출력 } }
public static void main(String [] args) { new GraphicsDrawStringEx(); } } |
Color와 Font 클래스
Color 생성자
Color(int r, int g, int b) | r, g, b값으로 색 생성 |
Color(int rgb) | rgb는 32비트의 정수이지만 하위 24비트만 유효 |
Font 생성자
Font(String fontFace, int style, int size) | 글꼴, 스타일, 크기를 지정 (스타일 : Font.BOLD, Font.ITALIC, Font.PLAIN) |
Graphics에서 색상과 폰트
void setColor(Color color) | 그래픽 색을 color로 설정 |
void setFont(Font font) | 그래픽 폰트를 font로 설정 |
Color와 Font를 이용하여 문자열 그리기
import javax.swing.*; import java.awt.*;
public class GraphicsColorFontEx extends JFrame { private MyPanel panel = new MyPanel();
public GraphicsColorFontEx() { setTitle("Color, Font 사용 예제"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setContentPane(panel); // 생성한 panel 패널을 컨텐트팬으로 사용
setSize(350, 470); setVisible(true); }
class MyPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.BLUE); // 파란색 선택 g.drawString("swing GUI", 30,30); // (30,30) 위치에 문자열 출력 g.setColor(new Color(255, 0, 0)); // 빨간색 선택 g.setFont(new Font("Arial", Font.ITALIC, 30)); // Arial 폰트 선택 g.drawString("My name is Hong", 30, 60); // (30,60) 위치에 문자열 출력 g.setColor(new Color(0x00ff00)); // 빨간색과 파란색을 섞은 색 선택 for(int i=1; i<=5; i++) { g.setFont(new Font("Jokerman", Font.ITALIC, i*10)); g.drawString("Fun Programming!", 30, 60+i*60); } } }
public static void main(String [] args) { new GraphicsColorFontEx(); } } |
'프로그램언어 > 자바' 카테고리의 다른 글
스윙 컴포넌트 그리기3 (0) | 2020.11.05 |
---|---|
스윙 컴포넌트 그리기2 (0) | 2020.11.05 |
스윙 컴포넌트의 공통 메소드5 (0) | 2020.11.05 |
스윙 컴포넌트의 공통 메소드4 (0) | 2020.11.05 |
스윙 컴포넌트의 공통 메소드3 (0) | 2020.11.04 |