자바의 Graphics - 1

27407 단어 JavaJava

스윙 컴포넌트 그리기

스윙 그리기의 기본

• 모든 컴포넌트는 자신의 모양을 스스로 그린다.
• 컨테이너는 자신을 그린 후, 자식들에게 그리기를 지시한다.

public void paintComponent(Graphics g)

• 스윙 컴포넌트가 자신의 모양을 그리는 메소드
• 컴포넌트가 그려져야 하는 시점마다 호출
-> (크기 변경, 위치 변경 등)
JComponent 메소드 : 모든 스윙 컴포넌트가 이 메소드를 가진다.

Graphics 객체

• java.awt.Graphics
• 컴포넌트 그리기에 필요한 도구를 제공하는 객체

예제

import java.awt.*;
import javax.swing.*;

// paintComponent()와 JPanel을 이용한 예제 
public class JPanelPaintExample extends JFrame {
    private ExPanel p = new ExPanel();
    
    public JPanelPaintExample() {
        setTitle("JPanel과 paintComponent 예제");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(p);
        setSize(300, 300);
        setVisible(true);
    }
    
    class ExPanel extends JPanel {
        // 사용자가 원하는 모양을 그리고자 할 경우 오버라이딩
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.RED);
            g.drawRect(10, 10, 50, 50);
            g.drawRect(50, 50, 50, 50);
            g.setColor(Color.BLUE);
            g.drawRect(90, 90, 50, 50);
        }
    }
    
    public static void main(String[] args) {
        new JPanelPaintExample();
    }
}

실행 결과

그래픽 기반 GUI 프로그래밍

• 스윙 컴포넌트를 사용하지 않음
• 선, 원, 이미지 등을 직접 그려서 GUI 화면을 구성
• 자유롭고 빠르게 GUI 표현이 가능하다.

Graphics의 기능

• 색상 선택
• 문자열 출력
• 도형 그리기
• 도형 칠하기
• 이미지 출력
• 클리핑

문자열 그리기

void drawString(String str, int x, int y)
-> (x, y) 좌표에 str 문자열을 그린다.
-> 현재 컬러와 폰트로 출력한다.

drawString() 예제

import java.awt.*;
import javax.swing.*;

public class DrawStringExample extends JFrame {
    private ExPanel p = new ExPanel();
    
    public DrawStringExample() {
        super("drawString() 메소드 예제");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(p);
        setSize(300, 300);
        setVisible(true);
    }
    
    class ExPanel extends JPanel {
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            // (50, 50)에 문자열을 출력
            g.drawString("drawString() 1번", 50, 50);
            // (80, 80)에 문자열을 출력
            g.drawString("drawString() 2번", 80, 80);
        }
    }
    
    public static void main(String[] args) {
        new DrawStringExample();
    }
}

실행 결과

Color & Font 클래스

Color

하나의 색을 표현하는 클래스
• 3가지 성분 : Red, Green, Blue
• 각 성분은 0 ~ 255 사이의 크기를 가진다.

생성자

Color(int r, int g, int b)
new Color(128, 255, 0);
// r(red), g(green), b(blue)
// RGB 색상을 생성


Color(int rgb)
new Color(0x0000ff00); // 초록색
// rgb 정수 값은 32비트 중 하위 24비트만 유효
// 0x00rrggbb 형태로 표현

사용 방법

Graphics g;
// 아래 세 방법 중 하나를 상황에 따라 사용
g.setColor(Color.RED); // 작성자는 해당 방법을 선호
g.setColor(new Color(128, 255, 0));
g.setColor(new Color(0x0000ff00);

Font

• 폰트를 표현하는 클래스

생성자

Font(String fontFace, int style, int size)
// fontFace : 고딕체, Arial 등을 의미
// style : Font.BOLD, Font. ITALIC, Font,. PLAIN 중 하나
// size : 픽셀 단위 크기

색상과 폰트 설정

void setColor(Color color)
// 설정할 색상을 color로 지정

void setFont(Font font)
// 설정할 폰트를 font로 지정

사용 방법

Graphics g;
Font font = new Font("Arial", Font.ITALIC, 20);
g.setFont(font);
g.setColot(Color.RED);
g.drawString("Font&Color", 50, 50);

예제

import java.awt.*;
import javax.swing.*;

public class ColorFontExample extends JFrame {
    private ExPanel p = new ExPanel();
    
    public ColorFontExample() {
        super("Color와 Font 예제");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(p);
        setSize(450, 500);
        setVisible(true);
    }
    
    class ExPanel extends JPanel {
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.BLUE);
            g.drawString("BLUE COLOR", 30, 30);
            
            g.setColor(new Color(255, 0, 0));
            g.setFont(new Font("Times", Font.BOLD, 30));
            g.drawString("RED COLOR & BOLD & Arial", 30, 60);
            
            g.setColor(new Color(0x0000ff00));
            for(int i=1; i<=5; i++) {
                g.setFont(new Font("Times", Font.ITALIC, i*10));
                g.drawString("GREEN COLOR", 30, 90+i*60);
            }
        }
    }
    
    public static void main(String[] args) {
        new ColorFontExample();
    }
}

실행 결과

좋은 웹페이지 즐겨찾기