프로그래밍 언어/JAVA

Graphics

· 코딩마이데이

그래픽 기반 GUI 프로그래밍

그래픽 기반 GUI 프로그래밍이란 스윙 컴포넌트를 사용하지 않고 선, 원, 이미 등을 직접 그려 GUI 화면을 구성하는 방식입니다.

 

이 방식의 장점

첫째, 그래픽 기능을 이용하면 스윙 컴포넌트로 만들 수 없는 모양을 자유자재로 만들어낼 수 있습니다.

둘째, 그래픽 그리기는 컴포넌트 그리기보다 빠르다.

셋째, 스윙도 결국 하부에는 그래픽을 기반으로 작성되었기 때문에, 자바의 GUI 바탕 기술을 이해하는데 도움이 됩니다.

넷째, 개발자는 그래픽을 이용하여 자신만의 컴포넌트를 장착할 수 있습니다.

 

Graphics

Graphics 클래스의 경로명은 java.awt.Graphics이며, 그리기, 칠하기, 이미지 출력, 클리핑 등 GUI 프로그래밍에 있어 필요한 필드와 메소드를 제공합니다.

 

Graphics의 좌표 체계

자바 그래픽의 좌표 값은 그래픽 대상 컴포넌트의 왼쪽 상단 모서리가 (0, 0)이고, 오른쪽으로 x축의 값이 중가하며, 아래쪽으로 y축의 값이 증가합니다.

 

Graphics의 기능

Grapics가 제공하는 기능은 간단히 다음과 같습니다.

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

문자열 그리기

문자열을 그리는 Grapics 메서드는 다음과 같습니다.

void drawString(String str, int x, int y)
// str 문자열을 (x, y) 영역에 그린다. 현재 Graphics에 설정된 색과 폰트로 문자열을 출력한다.

 

drawString() 메서드를 이용하여 문자열 출력하기

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

public class GraphicDrawStringEx extends JFrame {
    private MyPanel panel = new MyPanel();

    public GraphicDrawStringEx() {
        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("얼마나? 하늘만큼 땅만큼 !!!!", 60, 60); // 패널의 (60,60) 위치에 문자열 출력
        }
    }

    public static void main(String [] args) {
        new GraphicDrawStringEx();
    }
}

 

[실행 결과]

 

Color와 Font 클래스

Color

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

Color(int r, int g, int b) // r, g, b 값으로 sRGB 색 색상
Color(int rgb) // rgb는 32비트의 정수이지만, 32비트 중 하위 24비트만 유효. 즉, 0x00rrggbb로 표현, 각 바이트가 r, g, b의 색 성분

 

Color 클래스에 이미 만들어진 Color.Blue, Color.Yellow 등의 상수를 색으로 사용해도 됩니다. Color 클래스로 색을 만들고 사용하는 예를 다음과 같습니다.

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

 

Font

Font는 문자의 폰트 정보를 나타내며, 생성자는 다음과 같습니다.

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

 

예를 들어, 이텔릭 스타일을 가진 "Times New Roman"체로서 30픽샐 크기의 폰트를 만들면 다음과 같습니다.

Font f = new Font("Times New Roman", Font.ITALIC, 30);

 

Graphics에서 색상과 폰트 활용

문자에 적용되는 Font와는 달리 Color는 문자열 그리기, 도형 그리기 등 색이 필요한 모든 곳에 사용됩니다. 색과 폰트를 설정하는 Graphics 메서드는 다음과 같습니다.

void setColor(Color color) // 그래픽 색을 color로 설정. 그리기 시에 색으로 이동
void setFont(Font font) // 그래픽 폰트를 font로 설정. 문자열 출력 시 폰트로 이동

 

색상과 폰트 사용 예를 들어봅시다. "Arial" 폰트의 빨간색으로 "How much"의 문자열을 (30, 30) 위치에 출력하는 예는 다음과 같습니다.

 

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("I Love Java:~~~", 30, 30); // (30, 30) 위치에 문자열 출력
            g.setColor(new Color(255, 0, 0)); // 빨간색 선택
            g.setFont(new Font("Arial", Font.ITALIC, 30)); // Arial 폰트 선택
            g.drawString("How much?", 30, 60); // (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);
            }
        }
    }

    public static void main(String[] args) {
        new GraphicsColorFontEx();
    }
}

 

[실행결과]

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

이미지 그리기  (4) 2025.07.27
도형 그리기와 칠하기  (1) 2025.07.24
스윙 컴포넌트 그리기  (4) 2025.07.18
JSlider, 슬라이더 컴포넌트  (2) 2025.07.15
JComboBox<E>, 콤보박스 컴포넌트  (6) 2025.07.12