본문 바로가기

프로그램언어/자바

스윙 컴포넌트 그리기1

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);    // JPanelpaintComponent() 호출

        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("JPanelpaintComponent() 예제");

        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);   // JPanelpaintComponent() 호출

            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();

    }

}