2016-03-27 19 views
1
public class Dog { 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     ImageIcon image = new ImageIcon("dog.jpg"); 
     image.paintIcon(this,g,200,0); 
    } 

    public class Gui extends JFrame { 
     Frame frame = new Frame(); 
     Dog dog = new Dog(); 
     frame.add(dog.paintComponent(??)); 
    } 
} 

したがって、dogオブジェクトのペイントコンポーネントのメソッドがJFrameまたはJPanelに追加されます。オブジェクト内のImageIconを別のクラスのフレームに追加する

これは正しいことですか、またはrepaint()関数を呼び出す必要がありますか?

答えて

0

残念ながら、それはそれを行うには正しい方法ではありません、これはそれについて行くの右の方法であるか、

再描画()関数を呼び出す必要があります。 paintComponent(g)は無効になっています。その後、paintComponent(g)をオーバーライドし、JComponentのにDogクラスを拡張するか、JComponentのサブクラスの1にする必要があります:

class Dog extends JComponent{ 
    @Override 
    paintComponent(Graphics g){ 
     //your codes.. 
    } 
} 

ただし、あなたがちょうどあなたが、カスタムペイントで描くことができDogオブジェクトを作成したい場合paintComponent()メソッドを持つ必要はありません。あなたはDogキャンバスでやパネルを描きたいとき

class Dog{ 

    private ImageIcon image; 

    public Dog(){ 
     java.net.URL imgUrl = getClass().getResource("dog.jpg"); 
     image= new ImageIcon(imgUrl); 
    } 

    public void draw(Graphics g){ 
     g.drawImage(image.getImage(), x, y, width, height, null); 
    } 

} 

:あなたは、単にそれのためdraw()メソッドを作成することができますあなたは私の解決策を見てとることができ@thebigone

public class DrawingSpace extends JPanel 
{ 
    private Dog dog; 

    public DrawingSpace(){ 
     dog = new Dog(); 
    } 

    @Override 
    protected void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     dog.draw(g); //will invoke Dog's draw method and draw a dog 
    } 
} 
+0

、それおそらくあなたが望むものです。 – user3437460