2011-09-14 52 views
5

我有一個簡單的類來繪製JPanel中的圖形。這是我的課:誰在我的類中調用paintComponent()方法?

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import javax.swing.JPanel; 

class Drawing_panel extends JPanel { 
    public void paintComponent(Graphics g) { 
    super.paintComponent(g);  
    this.setBackground(Color.white); 
    g.setColor(Color.red); 
    g.fillRect(150, 80, 20, 20); 
} 

public Dimension getPreferredSize(){ 
    return new Dimension(500,500); 
} 

}

我還有一個類實例化這一個:

Drawing_panel dp = new Drawing_panel(); 

有一個在Drawing_panel類和/或要麼無顯式調用沒有構造paintComponent()getPreferredSize()方法。我假設這個方法在父類JPanel的構造函數中被調用,但是我沒有看到那裏的調用。

+0

請學習Java命名約定並嚴格遵守 – kleopatra

回答

6

paintComponent從幾個不同的地方被調用。來自JComponent.paint的電話可能是您要查找的電話號碼。

請注意,paintComponent未從任何構造函數調用。 paintComponent被稱爲「按需」,即當系統決定組件需要重新繪製時。 (例如,可以在組件大小調整時,或窗口從最小化狀態恢復時)。要清楚:組件不是「繪製,然後使用」,而是「使用,然後在需要時繪製」。

這整個繪畫調用鏈不是你應該打擾的,因爲它完全由Swing和所謂的Event Dispatch Thread來完成。

3

當你繼承的JComponent或JPanel中繪製圖形,覆蓋paintComponent()方法。調用此方法是因爲用戶對需要重繪的用戶界面做了某些操作,或者您的代碼明確要求重繪。當一個窗口變成可見變爲可見時 自動調用(發現或deminimized)或大小時,「系統」自動調用對於必須重繪屏幕的各個領域的paintComponent()方法。

+0

@Jonas - 感謝您的見地的反應,尤其是關於使用重繪()方法。這將派上用場。 – jamesTheProgrammer

相關問題