2011-03-07 24 views
0

私はJPanelのを拡張していWorldManagerクラスを持っていますただクラスがそうのような方法を描くことを呼び出すことができる方法となる:原則としてJavaの描画画像が

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

+1

"スイングプログラムは、' paint() 'をオーバーライドするのではなく、' paintComponent() 'をオーバーライドする必要があります。 [AWTとスイングのペイント:ペイント方法](http://java.sun.com/products/jfc/tsc/articles/painting/index.html#callbacks) – trashgod

答えて

2

を、あなたのアプローチには何の問題もありません。注意

  1. trashgod として、あなたはpaintComponentメソッドの代わりに、paintメソッドを上書きする必要があります。

    この理由は、article linked by trashgodに記載されています。この方法は、paintBorder()paintChildren()方法は、その境界線の描画および子コンポーネントを行うことができ、あなたが唯一の本当のコンテンツを考えることは自由です。

  2. あなたの他のペイントメソッドは、Graphicsパラメータ(またはこれが必要な場合にGraphics2Dを1度だけキャストしたい場合)を取る必要があります。ここで

例です。

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のペイントメソッドをpaintComponentメソッドに変更し、super.paintComponent(g)を呼び出して動作させましたが、通常のペイントメソッドの代わりにpaintComponentを使用する必要がある理由を説明できますか? – Bob

+0

@Chris:これを今追加しました。 –

+0

@Chris質問に「回答/正しい」と記入してください。これは、後で回答を探している人に役立ちます。 –