2016-03-27 28 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)應該被覆蓋。您需要將狗類擴展到JComponent的或JComponent中的子類之一,然後覆蓋paintComponent(g)

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

然而,如果你只是想創建可與風俗畫中繪製的狗對象,你做不需要有一個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()方法

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

@thebigone你可以在我的解決方案來看看,它可能是你想要的。 – user3437460

相關問題