컴포넌트 표면에 선, 원, 사각형, 텍스트, 이미지를 커스텀으로 직접 그려 넣는 자바 2D 그래픽(Graphics) 처리 기법을 다룹니다.
1. 그래픽 처리 용어 사전 (Glossary)
- Graphics Class: 선, 도형, 텍스트, 이미지를 그리는 그리기 도구 패키지 클래스입니다.
paintComponent(Graphics g): Swing 컴포넌트가 화면에 다시 그려져야 할 때 JVM이 자동 호출해 주는 커스텀 그래픽 메소드입니다.- repaint(): 화면 변경이 일어났을 때 컴포넌트의
paintComponent()를 강제로 다시 호출하도록 요청하는 메소드입니다.
2. 커스텀 그래픽 패널 구현 예제
import javax.swing.*;
import java.awt.*;
class CustomPaintPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g); // 기존 배경 칠하기
// 1. 빨간색 직선 그리기
g.setColor(Color.RED);
g.drawLine(20, 20, 200, 20);
// 2. 파란색 채워진 사각형 그리기
g.setColor(Color.BLUE);
g.fillRect(20, 50, 100, 60);
// 3. 초록색 원(타원) 그리기
g.setColor(Color.GREEN);
g.fillOval(150, 50, 80, 80);
// 4. 커스텀 폰트 텍스트 출력
g.setColor(Color.BLACK);
g.setFont(new Font("Pretendard", Font.BOLD, 18));
g.drawString("DAVHAVE Java 2D Graphics", 20, 180);
}
}
public class GraphicFrame extends JFrame {
public GraphicFrame() {
setTitle("자바 2D 그래픽 실습");
setSize(320, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new CustomPaintPanel());
setVisible(true);
}
public static void main(String[] args) { new GraphicFrame(); }
}
3. 자주 묻는 질문 (Q&A)
Q. paintComponent() 메소드를 개발자가 코드에서 직접 panel.paintComponent(g) 로 부르면 안 되나요?
A. 안 됩니다! 그래픽 렌더링 스레드의 제어권은 JVM에 있으므로, 화면을 다시 그리려면 개발자는 반드시 panel.repaint() 메소드를 호출해야 안전하게 갱신됩니다.