首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME 繪圖避坑:g.drawString 不顯示文字的兩大核心原因與排查清單

     編輯:J2ME

現象描述

呼叫 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 狀態

完整排查清單

  1. 確認 g.setColor() 使用可見顏色(非透明、非背景色)
  2. 確認文字座標 (x, y) 在畫布可見範圍內
  3. 確認 anchor 參數正確(Graphics.TOP | Graphics.LEFT 等)
  4. 確認 Clip 區域包含文字繪製區域
  5. 確認字體已設定(g.setFont()),預設字體不可見極罕見但可驗證
  6. 確認 paint() 方法完整執行,無提前 return 或拋出異常
  7. 雙緩衝模式下,確認最終 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() 刷新至螢幕。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved