Java Can';t覆盖组件

Java Can';t覆盖组件,java,swing,graphics,overriding,Java,Swing,Graphics,Overriding,因此,这里有一段很好的代码不起作用 它给出了以下错误: graph类型的方法加载器(Graphics)必须重写或实现超类型方法 下面是完整的课程: public class graph extends JPanel { private static final long serialVersionUID = -397959590385297067L; int screen = -1; int x = 10; int y = 10; int dx = 1;

因此,这里有一段很好的代码不起作用

它给出了以下错误:

graph类型的方法加载器(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();
        }
    }
}
公共类图扩展了JPanel{
私有静态最终长serialVersionUID=-397959590385297067L;
int屏幕=-1;
int x=10;
int y=10;
int dx=1;
int-dy=1;
imageStream imget=新imageStream();
@凌驾
公共空白加载器(图形g2){
超级组件(g2);
而(屏幕==-1){
g2.drawImage(imget.getload(),0,0,getWidth(),getHeight(),null);
g2.drawImage(imget.getman(),x,y,30,30,null);
系统输出打印项次(“绘制”);
if(x<1){
dx=1;
}如果(x>getWidth()),则为else{
dx=-1;
}否则如果(y<1){
dy=1;
}如果(y>getHeight()),则为else{
dy=-1;
}
x=x+dx;
y=y+dy;
这个。重新绘制();
}
}
}

您并没有试图覆盖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();
        }
    }

}

另外,不要从paintComponent或任何绘制方法中调用
repaint()
,并确保您也没有从这些方法中读取图像文件。这些线路:

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

让我担心您可能正在读取
imget.getload()
imget.getman()
方法中的图像,希望不是这样。

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

方法不会重写或实现超类型中的方法

这是我预料到的错误

执行此操作时:

@Override public void Loader(Graphics g2)
必须确保子类扩展到的超类(在本例中为类JPanel)也必须包含要重写的方法(在本例中为Loader())

要停止错误,只需从
加载程序
方法中删除
@覆盖

我怀疑这就是你真正想要的:

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

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

发布一篇文章,paintComponent方法应该受到保护,而不是公开的,但这不是问题的原因。我同意@Reimeus:发布您的,并发布完整的错误消息。据我们所知,您可以拥有自己的名为“JPanel”的类,但该类没有此方法。@Reimeus:fyi,我不确定您是否知道,但是MCVE链接现在是一个自动链接,就像链接一样,如果您只需将
[MCVE]
放在方括号内,网站的软件将扩展并提供适当的链接。@HovercraftFullOfEels很好,谢谢:)请参阅下面答案中正确缩进的代码。在将来,请发布真实的代码,而不是某种类型的代码。所以…把覆盖放在上面。我得到了和我一样的错误-i@DanjahSoftProgrammer:不使用正确的方法。对不起,这几乎是荒谬的。请参见编辑以回答问题。我不想说脏话,但错误对你来说应该是显而易见的。为了确保我没有做任何愚蠢的事情,我复制并粘贴了它,它给了我同样的信息error@DanjahSoftProgrammer:你做了建议的改变了吗?
protected void Loader(Graphics g){
    ...
}

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