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

Swing 繪圖陷阱:為什麼 repaint() 無法觸發 paintComponent?正確覆寫方法名稱關鍵

     編輯:Java 相關知識

常見錯誤:覆寫 printComponent 而非 paintComponent 導致 repaint() 不會呼叫自訂繪圖邏輯,說明 Swing 繪圖機制正確的方法簽名與呼叫流程。

錯誤代碼

class GamePanel extends JPanel {
  public void display() {
    System.out.println("GamePanel's display!");
    this.repaint();
  }
  protected void printComponent(Graphics g) { // 錯誤方法名
    System.out.println("GamePanel's PrintComponent");
  }
}

執行結果:僅印出 GamePanel's display!,printComponent 從未被呼叫。

正確做法

@Override
protected void paintComponent(Graphics g) { // 正確:paintComponent
  super.paintComponent(g); // 必須先呼叫父類實作
  System.out.println("GamePanel's PaintComponent");
  // 自訂繪圖邏輯...
}

機制說明

  1. repaint() 排程重繪,最終由事件派發執行緒 (EDT) 呼叫 paintComponent(Graphics)。
  2. JComponent 定義 paintComponent 為 protected,子類別需 @Override 覆寫。
  3. printComponent 是印表列印用的不同方法,不參與螢幕重繪流程。

檢查清單

  • 方法名稱拼寫是否為 paintComponent (大小寫敏感)。
  • 參數是否為 Graphics g (非 Graphics2D,雖可轉型)。
  • 是否呼叫 super.paintComponent(g) 清除背景。
  • 是否加上 @Override 註解讓編譯器檢查簽名。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved