所以这里有一段很好的代码不起作用!!
它给出了这个错误:
类型图的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();
}
}
}
答案 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);
}