无法覆盖 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);
}
所以这里有一段很好的代码 但它不起作用!!
它给出了这个错误:
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);
}