2013-03-31 56 views
1

我創建了一個名爲Test的類,很可能是我出錯的地方。在方法中使用awt.Graphics

import javax.swing.JPanel; 
import java.awt.*; 
public class Test extends JPanel { 

Graphics grap; 
public void sun() 
{ 
    super.paintComponent(grap); 
    grap.setColor(Color.YELLOW); 
    grap.fillOval(0,0,20,20); 
} 
} 

正如你可以看到我想要使用的方法的面板的左上角畫一個黃色的「橢圓形」,但我沒有使用的paintComponent方法。現在我嘗試在我的Paint組件方法中實現它,該方法位於名爲Painting的類中。

//import...; 
public class Painting extends JPanel{ 

    protected void paintComponent(Graphics g) 
    { 
     Test test = new Test(); 

     test.sun(); 

    } 

現在我創建了一個主窗口,它將創建一個面板並顯示黃色的橢圓。

//import... 
public class main extends JFrame{ 
    public static main(String [] args){ 

     JFrame window = new JFrame(); 
     window.add(new Painting()); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setSize(100,100); 
     window.setLocationRelativeTo(null); 
     window.setVisible(true); 

    } 

} 

但這不起作用。我有一種感覺,那就是測試中的太陽法。我如何得到這個工作?我看過所有的java書籍,找不到任何可以幫助的東西。

請注意,我不會向該方法添加參數。

謝謝 Tom。

+0

什麼是CelestialDisplayPanel? – thejh

+0

在'Test'中,不會''grap'永遠是'null'? – thejh

回答

2

幾點這裏要注意:

  1. ,一定不要調用自己super.paintComponent除了重寫paintComponent方法本身。
  2. 如果你想要做一些圖形的活動,然後重寫paintComponent方法和繪製圖形那邊
  3. 當你重寫paintComponent方法,則該方法中的第一條語句應該是super.paintComponent(g)。現在

,所有上述各點去你的代碼,現在應該是這樣的:

public class Test extends JPanel { 

public void paintComponent(Graphics grap) 
{ 
    super.paintComponent(grap); 
    grap.setColor(Color.YELLOW); 
    grap.fillOval(0,0,20,20); 
} 
} 

和你Painting類應該是這樣的:

public class Painting extends JPanel{ 
    Test test; 
    public Painting() 
    { 
    test = new Test(); 
    setLayout(new BorderLayout()); 
    add(test); 
    } 
} 
+0

如果我想在不同的地方繪製50個橢圓,那麼我會遇到廣泛的代碼問題 – Jonathan

+0

您想在同一面板上的不同位置繪製50個橢圓? –

+0

是和在不同的位置 – Jonathan

2

,如果我想在不同的地方畫50個橢圓然後我會有一個廣泛的代碼問題

然後,您將保留要繪製的橢圓的列表。請參閱Custom Painting Approaches,其中描繪面板上的一堆矩形。所有代碼都會遍歷ArrayList來繪製矩形。只需要幾行代碼。

+0

+1列表#'。 – trashgod