无法覆盖 paintcomponent

Can't override paintcomponent

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

它给出了这个错误:

The method Loader(Graphics) of type graph must override or implement a supertype method

这里是完整的 class:

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();
        }
    }
}

您不是要覆盖 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() 方法读取图像,但愿事实并非如此。

我运行你的代码,我得到的错误和你的不一样。我得到了

method does not override or implement a method from a supertype

这是我预料中的错误。

当你这样做时:

@Override public void Loader(Graphics g2)

您必须确保您的子class扩展到的超级class(在这种情况下,class JPanel)也必须包含您正在覆盖的方法(在这种情况下, 装载机()).

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

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

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

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