2011-03-07 88 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