2011-03-07 124 views
0

我有延伸的JPanel並有WorldManager類:JPanel類之外的Java繪製圖像

public void paint(Graphics g) {}

我想什麼做的是有單獨的類,就像一個世界級的用自己的油漆方法和能夠只是調用的類paint方法,像這樣:

public void paint(Graphics g) { world1.paint(); hero.paint(); }

+1

「Swing程序應該重載'paintComponent()'而不是重寫'paint()'。」 [在AWT和Swing中繪製:繪製方法](http://java.sun.com/products/jfc/tsc/articles/painting/index.html#callbacks)。 – trashgod 2011-03-07 23:40:00

回答

2

原則上,有什麼不對你的方法。

  1. 由於trashgod指出,你應該覆蓋的paintComponent方法而不是paint方法。

    這樣做的原因是注意在article linked by trashgod:這樣一來,paintBorder()paintChildren()方法可以做他們的邊框和子組件的畫,你可以自由地只想到真正的內容。

  2. 你的其他繪畫方法也應該帶一個Graphics參數(或Graphics2D,如果你需要這個並且只想投一次),然後被調用。

下面是一個例子:

class WorldManager extends JPanel 
{ 

    private World world1; 
    private Person hero; 

    public void paintComponent(Graphics g) { 
     super.paintComponent(); // paints the background, if opaque 
     world.paint(g); 
     hero.paint(g); 
    } 
} 

那麼,什麼是你的問題,實際上是?

+0

@Paulo 因此,我將我的WorldManager中的paint方法更改爲paintComponent方法,並調用super.paintComponent(g),它可以工作,但是能否向我解釋爲什麼必須使用paintComponent而不是常規的paint方法? – Bob 2011-03-08 13:18:31

+0

@Chris:我現在加了這個。 – 2011-03-08 13:33:58

+0

@Chris請不要忘記將問題標記爲「已回答/正確」。這有助於以後搜索答案的人。 – 2011-03-08 15:01:54