无法覆盖paintcomponent

时间:2015-08-23 21:40:25

标签: java swing graphics override

所以这里有一段很好的代码不起作用!!

它给出了这个错误:

  

类型图的Loader(Graphics)方法必须覆盖或实现超类型方法

以下是完整的课程:

public class graph extends JPanel {
    private static final long serialVersionUID = -397959590385297067L;
    int screen = -1;
    int x = 10;
    int y = 10;
    int dx = 1;
    int dy = 1;
    imageStream imget = new imageStream();

    @Override
    public void Loader(Graphics g2) {
        super.paintComponent(g2);
        while (screen == -1) {
            g2.drawImage(imget.getload(), 0, 0, getWidth(), getHeight(), null);
            g2.drawImage(imget.getman(), x, y, 30, 30, null);
            System.out.println("drawn");
            if (x < 1) {
                dx = 1;
            } else if (x > getWidth()) {
                dx = -1;
            } else if (y < 1) {
                dy = 1;
            } else if (y > getHeight()) {
                dy = -1;
            }
            x = x + dx;
            y = y + dy;
            this.repaint();
        }
    }
}

2 个答案:

答案 0 :(得分:3)

你并没有试图覆盖paintComponent,而是一个名为loader的方法,这是JPanel没有的方法,所以你不能覆盖它。因此,错误消息正确地告诉您,您无法执行此操作。为什么不尝试覆盖正确的方法paintComponent?

public class graph extends JPanel{

    private static final long serialVersionUID = -397959590385297067L;
    int screen=-1;
    int x=10;
    int y=10;
    int dx=1;
    int dy=1;
    imageStream imget=new imageStream();

    @Override 
    public void Loader(Graphics g2){ // ***** this method does not exist in JPanel
        super.paintComponent(g2);
        while(screen==-1){
            g2.drawImage(imget.getload(),0,0,getWidth(),getHeight(),null);
            g2.drawImage(imget.getman(),x,y,30,30,null);
            System.out.println("drawn");
            if (x<1){
                dx=1;   
            }else if(x>getWidth()){
                dx=-1;  
            }else if(y<1){
                dy=1;   
            }else if(y>getHeight()){
                dy=-1;
            }

            x=x+dx;
            y=y+dy;
            this.repaint();
        }
    }

}

解决方案:将其更改为:

    @Override 
    protected void paintComponent(Graphics g2){

此外,请勿在paintComponent或任何绘画方法中调用repaint(),并确保您不会从这些方法中读取图像文件。这些行:

g2.drawImage(imget.getload(), 0, 0, getWidth(), getHeight(), null);
g2.drawImage(imget.getman(), x, y, 30, 30, null);

让我担心您可能会使用imget.getload()imget.getman()方法阅读图片,希望情况并非如此。

答案 1 :(得分:2)

我运行了你的代码,我得到的错误与你的不同。我得到了

  

方法不会覆盖或实现超类型

中的方法

这是我预期的错误。

执行此操作时:

@Override public void Loader(Graphics g2)

您必须确保子类扩展到的超类(在本例中为JPanel类)还必须包含您要覆盖的方法(在本例中为Loader())。

要停止错误,只需从@Override方法移除Loader

我怀疑这是你想要的:

protected void Loader(Graphics g){
    ...
}

@Override
protected void paintComponent(Graphics g){
    ...
    Loader(g);
}