呼叫 Graphics.drawString() 後,畫面上完全看不到預期文字,無任何異常拋出。
| 原因 | 說明 | 排查方法 |
|---|---|---|
| 前景色與背景色相同 | g.setColor() 設定的繪圖顏色(前景色)與畫布背景色一致,導致文字「隱形」 | 檢查 g.setColor(fg) 與 g.fillRect() 背景色是否相同;建議明確設定對比色(如黑字白底) |
| Clip 區域未還原 | 先前程式碼設定 g.setClip(x, y, w, h) 限制繪圖區域,且未在繪製文字前還原,導致文字座標落在 Clip 區域外而被裁切 | 在 drawString() 前呼叫 g.setClip(0, 0, getWidth(), getHeight()) 或儲存/還原 Clip 狀態 |
g.setColor() 使用可見顏色(非透明、非背景色)(x, y) 在畫布可見範圍內anchor 參數正確(Graphics.TOP | Graphics.LEFT 等)g.setFont()),預設字體不可見極罕見但可驗證paint() 方法完整執行,無提前 return 或拋出異常g.drawImage(offScreen, ...) 正確呈現public void paint(Graphics g) {
// 1. 清除背景
g.setColor(0xFFFFFF); // 白底
g.fillRect(0, 0, getWidth(), getHeight());
// 2. 設定前景色(黑字)
g.setColor(0x000000);
// 3. 還原 Clip 至全螢幕(防止上層邏輯殘留 Clip)
g.setClip(0, 0, getWidth(), getHeight());
// 4. 設定字體(可選)
g.setFont(Font.getDefaultFont());
// 5. 繪製文字
g.drawString("Hello J2ME", 10, 10, Graphics.TOP | Graphics.LEFT);
}
若使用 GameCanvas 雙緩衝,上述操作應在 getGraphics() 取得的離屏 Graphics 物件上進行,最後呼叫 flushGraphics() 刷新至螢幕。