2013-12-09 47 views
0
public class aaa { 
public static void main(String[] args) 
{ 

bbb b=new bbb(); 
    b.setVisible(true); 
    b.setSize(400, 400); 

} 

} 
class bbb extends JFrame 
{ 
bbb() 
{ 

draw d=new draw(); 
add(d); 
} 

} 
class draw extends JComponent 
{ 
public void paintComponent(Graphics g) 
{ 
    Graphics2D g2=(Graphics2D) g; 
    Ellipse2D rect=new Ellipse2D.Double(); 
    rect.setFrameFromCenter(50,50,70,70); 
    g2.draw(rect); 
    g2.setPaint(Color.blue); 
    g2.fill(rect); 
} 
} 

其實,我知道這個程序會生成一個框架,並繪製矩形內橢圓... 我唯一的問題是,當將方法「的paintComponent(圖形g^)「被調用... ,我知道它是」JComponent「內部的一個方法,但是什麼時候會調用...請給出一個簡單的解釋......我不能讓下面的程序,請解釋

還有一個問題是這樣的。 ..它的參數類型爲「Graphics」....但它沒有爲類「Graphics」創建對象,那麼我們怎樣才能調用它的方法(類「Graphics」中的方法)..

我知道這是一個愚蠢的問題,但我知道我在概念中遺漏了一些東西...

+4

這不是一個愚蠢的問題,但它顯示的是,你錯過了一些教程,解釋這一點和更多。請從這裏開始:[課程:執行自定義繪畫](http://docs.oracle.com/javase/tutorial/uiswing/painting/index.html)。更多細節可以在這裏找到:[在AWT和Swing中繪畫](http://www.oracle.com/technetwork/java/painting-140037.html)。做Swing圖形通常需要採用不同的編碼方式和思維方式,打破一些預先設想的概念,因爲圖形通常是被動地完成的。檢查教程,你不會後悔這樣做。 –

+0

http://docs.oracle.com/javase/tutorial/uiswing/painting/closer.html –

回答

1
  • 的paintComponent()將在需要時通過系統調用,您不必擔心關於自己調用它。
  • 您可以使用傳遞來調用Graphics方法的參數g,例如。 g.setPaint()等

docs

(...)畫子系統將確定該成分被破壞,將確保您的paintComponent方法被調用。