本節測試對 Java 面向對象核心概念(物件、類別、訊息傳遞)的理解,並透過修改 ClickMe Applet 實作顏色與繪圖操作。
Color.red 設定紅色,還有哪些預定義顏色常數?java.awt.Color 類別提供 13 個標準顏色常數:
| 常數名稱 | 顏色 | RGB 值 |
|---|---|---|
Color.black | 黑色 | (0, 0, 0) |
Color.blue | 藍色 | (0, 0, 255) |
Color.cyan | 青色 | (0, 255, 255) |
Color.darkGray | 深灰 | (64, 64, 64) |
Color.gray | 灰色 | (128, 128, 128) |
Color.green | 綠色 | (0, 255, 0) |
Color.lightGray | 淺灰 | (192, 192, 192) |
Color.magenta | 洋紅 | (255, 0, 255) |
Color.orange | 橙色 | (255, 200, 0) |
Color.pink | 粉紅 | (255, 175, 175) |
Color.red | 紅色 | (255, 0, 0) |
Color.white | 白色 | (255, 255, 255) |
Color.yellow | 黃色 | (255, 255, 0) |
另有 Color.getHSBColor(h, s, b) 依 HSB 模式建立顏色,new Color(r, g, b) 自訂 RGB。
紫色非預設常數,有三種做法:
// 1. RGB 建構子 (紅+藍)
Color purple = new Color(128, 0, 128); // 標準紫
// 或
Color purple = new Color(160, 32, 240); // 亮紫
// 2. HSB 建立 (色相 270° = 紫色系)
Color purple = Color.getHSBColor(0.75f, 1.0f, 0.5f);
// 3. 16進位整數 (JDK 1.4+)
Color purple = new Color(0x800080);
前置需求:需有 Spot.java 輔助類別,完整專案結構請參考教學原始碼。
import java.applet.Applet;
import java.awt.*;
public class ClickMe extends Applet {
Spot spot;
public void init() {
spot = new Spot();
setBackground(Color.white);
}
public void paint(Graphics g) {
// 原本:g.setColor(Color.red); g.fillOval(...);
// 修改為綠色方框
g.setColor(Color.green);
g.fillRect(spot.x - 10, spot.y - 10, 20, 20); // 20x20 方框置中於點擊位置
}
public boolean mouseDown(Event e, int x, int y) {
spot.x = x;
spot.y = y;
repaint();
return true;
}
}
關鍵差異:
fillOval → fillRectColor.red → Color.greenpublic void paint(Graphics g) {
g.setColor(new Color(128, 0, 128)); // 紫色
g.setFont(new Font("SansSerif", Font.BOLD, 24));
g.drawString("Your Name", spot.x, spot.y); // 在點擊位置繪製文字
}
補充說明:
drawString 基準點為文字左下角,非中心FontMetrics 計算文字寬高以實現置中appletviewer 中執行spot (Spot 實例)、g (Graphics 實例)、Color.green (Color 實例)Spot, Graphics, Color, Applet, Fontg.setColor(), g.fillRect(), repaint(), spot.x = xpaint(), mouseDown(), init(), setColor(), fillRect()spot.x, spot.ymouseDown(Event) 演進為 Listener 模式 (MouseListener)透過此練習,可驗證對「物件協作、方法呼叫、狀態封裝」等 OO 基礎概念的掌握程度。