Files
java-examples/docs/2D 그래픽스.md

145 lines
5.1 KiB
Markdown

# **자바 2D 그래픽스 쉽게 배우기**
## **1. 자바 2D 그래픽스란?**
자바에서 2D 그래픽을 그리려면 `java.awt``javax.swing` 패키지를 사용한다.
특히 **`Graphics`, `Graphics2D` 클래스**를 활용하면 **선을 긋고, 도형을 그리고, 색상을 채우고, 이미지를 출력할 수 있다.**
---
## **2. 주요 클래스 및 메서드 정리**
### **(1) `Graphics` 클래스 (기본 그래픽 처리)**
| 메서드 | 설명 |
|--------|------------------------------|
| `drawLine(x1, y1, x2, y2)` | (x1, y1) → (x2, y2) 직선 그리기 |
| `drawRect(x, y, width, height)` | 사각형 그리기 (테두리만) |
| `fillRect(x, y, width, height)` | 사각형 그리기 (채우기) |
| `drawOval(x, y, width, height)` | 타원 그리기 (테두리만) |
| `fillOval(x, y, width, height)` | 타원 그리기 (채우기) |
| `drawPolygon(xPoints, yPoints, nPoints)` | 다각형 그리기 |
| `fillPolygon(xPoints, yPoints, nPoints)` | 다각형 채우기 |
| `setColor(Color c)` | 그리기 색상 변경 |
| `setFont(Font f)` | 글꼴 변경 |
| `drawString(String str, x, y)` | 문자열 그리기 |
**예제 코드 (사각형과 문자열 그리기)**
```java
import javax.swing.*;
import java.awt.*;
public class MyPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillRect(50, 50, 100, 100); // 파란색 사각형
g.setColor(Color.RED);
g.drawString("Hello, Graphics!", 60, 180); // 문자열 출력
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new MyPanel());
frame.setVisible(true);
}
}
```
**`paintComponent(Graphics g)`를 오버라이드하여 원하는 그래픽을 그릴 수 있다!**
---
### **(2) `Graphics2D` 클래스 (고급 그래픽 처리)**
`Graphics2D``Graphics`의 확장판으로, **더 정밀한 그래픽을 그릴 수 있다.**
`Graphics2D` 객체는 `Graphics`에서 다운캐스팅하여 얻을 수 있다.
```java
Graphics2D g2 = (Graphics2D) g;
```
| 메서드 | 설명 |
|--------|------------------------------|
| `setStroke(Stroke s)` | 선 두께 설정 |
| `setRenderingHint(RenderingHints.Key, Object)` | 안티앨리어싱 적용 (부드러운 그래픽) |
| `draw(Shape s)` | `Shape` 객체 그리기 |
| `fill(Shape s)` | `Shape` 객체 채우기 |
| `rotate(theta, x, y)` | (x, y)를 중심으로 회전 |
| `translate(x, y)` | (x, y)만큼 이동 |
| `scale(sx, sy)` | x, y 방향으로 확대/축소 |
**예제 코드 (둥근 사각형과 선 두께 조절)**
```java
import javax.swing.*;
import java.awt.*;
public class MyPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(5)); // 선 두께 설정
g2.setColor(Color.MAGENTA);
g2.drawRoundRect(50, 50, 100, 100, 20, 20); // 둥근 사각형
g2.setColor(Color.GREEN);
g2.drawLine(50, 200, 200, 200); // 굵은 선
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new MyPanel());
frame.setVisible(true);
}
}
```
**`Graphics2D`를 사용하면 더 정밀한 그래픽 조작이 가능하다!**
---
### **(3) `Color`와 `Font` 클래스 (색상과 글꼴 설정)**
| 메서드 | 설명 |
|--------|------------------------------|
| `new Color(r, g, b)` | RGB 값으로 색상 생성 |
| `setColor(Color c)` | 현재 색상 변경 |
| `setFont(Font f)` | 글꼴 설정 |
| `new Font("FontName", style, size)` | 글꼴 생성 |
**예제 코드 (다양한 색상과 글꼴 적용)**
```java
g.setColor(new Color(255, 100, 100)); // 연한 빨간색
g.fillOval(50, 50, 100, 100);
g.setColor(Color.BLUE);
g.setFont(new Font("Arial", Font.BOLD, 20));
g.drawString("Hello!", 70, 180);
```
**`Color``Font`를 조합하면 더 다양한 표현이 가능하다!**
---
### **(4) `Image` 클래스 (이미지 출력)**
| 메서드 | 설명 |
|--------|------------------------------|
| `Image img = Toolkit.getDefaultToolkit().getImage("image.png")` | 이미지 로드 |
| `drawImage(img, x, y, this)` | 이미지 그리기 |
**예제 코드 (이미지 출력)**
```java
Image img = Toolkit.getDefaultToolkit().getImage("image.png");
g.drawImage(img, 50, 50, this);
```
---
## **3. 정리**
**기본 도형을 그리려면 `Graphics` 클래스 사용! (`drawLine()`, `drawRect()` 등)**
**더 정밀한 그래픽을 원하면 `Graphics2D` 사용! (`setStroke()`, `rotate()` 등)**
**색상은 `Color`, 글꼴은 `Font` 클래스로 설정 가능!**
**이미지 출력도 가능! (`drawImage()`)**
자바의 2D 그래픽을 활용하면 **간단한 그림부터 UI 요소, 차트, 애니메이션까지 다양한 그래픽을 만들 수 있다!**