系統梳理 Java AWT Graphics 核心繪圖方法,涵蓋矩形、圓角矩形、多邊形、橢圓、弧形、填充扇形六大基礎圖形,附帶網格背景輔助定位,代碼可直接運行觀察效果,是 2D 圖形學入門必修課。
import java.awt.*;
import javax.swing.*;
public class Sample extends JFrame {
public static void main(String[] args) { new Sample().update(); }
Sample() {
super("Basic Shapes Demo");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(310, 160);
setVisible(true);
}
public void update() { repaint(); }
public void paint(Graphics g) {
// 1. 繪製 10px 網格輔助定位
g.setColor(Color.CYAN);
for (int i = 0; i <= 300; i += 10) g.drawLine(i, 0, i, 150); // 垂直線
for (int i = 0; i <= 150; i += 10) g.drawLine(0, i, 300, i); // 水平線
// 2. 基礎圖形繪製
g.setColor(Color.BLACK);
// 矩形 (x, y, width, height)
g.drawRect(10, 30, 80, 50);
// 圓角矩形 (x, y, width, height, arcWidth, arcHeight)
g.drawRoundRect(110, 30, 80, 50, 20, 10);
// 多邊形 (xPoints, yPoints, nPoints)
int[] x = {10, 30, 80, 50, 10};
int[] y = {90, 140, 120, 100, 90};
g.drawPolygon(x, y, 5);
// 橢圓/圓 (x, y, width, height) — 外接矩形
g.drawOval(110, 90, 80, 50);
// 弧形 (x, y, width, height, startAngle, arcAngle)
g.drawArc(210, 30, 80, 50, 0, 90); // 0° 起始,順時針 90°
// 填充扇形
g.fillArc(210, 90, 80, 50, 0, 90);
}
}
| 方法 | 參數含義 | 角度制約定 |
|---|---|---|
drawRect(x, y, w, h) | 左上角 (x,y),寬 w,高 h | — |
drawRoundRect(x, y, w, h, aw, ah) | 圓角橫向寬 aw,縱向高 ah | — |
drawPolygon(x[], y[], n) | n 個頂點連線封閉 | — |
drawOval(x, y, w, h) | 外接矩形 (x,y,w,h) | — |
drawArc(x, y, w, h, start, extent) | 外接矩形 + 起始角度 + 掃過角度 | 3點鐘=0°,順時針為正 |
fillArc(...) | 同 drawArc,填充扇形區域 | 同左 |
startAngle=0 為 3 點鐘方向,順時針增加。drawArc 只畫弧線,fillArc 畫扇形(弧線+兩條半徑連線)。drawPolygon 自動連接首尾頂點;drawPolyline 不閉合。drawXxx 都有對應 fillXxx(如 fillRect, fillOval)。
Graphics2D g2 = (Graphics2D) g;
// 抗鋸齒
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// 線條樣式
g2.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 0, new float[]{10,5}, 0)); // 虛線
// 變換
g2.translate(50, 50); g2.rotate(Math.PI/4); g2.scale(1.5, 1.5);
// 繪製後恢復
g2.setTransform(new AffineTransform());