Java 图像没有重新绘制,只是相乘
我有一个JPanel实现了一个键侦听器。它提取并显示从另一个类中提取的图像。NA将密钥侦听器传递给该类,以获取多个图像中的一个,并将其向一个方向移动2px。我的问题是,调用repaint()时,旧图像不会消失,因此我会得到一行图像。 问题是,当我将类与图像和JPanel类组合成一个双决赛时,效果非常好。Java 图像没有重新绘制,只是相乘,java,image,swing,jpanel,repaint,Java,Image,Swing,Jpanel,Repaint,我有一个JPanel实现了一个键侦听器。它提取并显示从另一个类中提取的图像。NA将密钥侦听器传递给该类,以获取多个图像中的一个,并将其向一个方向移动2px。我的问题是,调用repaint()时,旧图像不会消失,因此我会得到一行图像。 问题是,当我将类与图像和JPanel类组合成一个双决赛时,效果非常好。 我对此做了一些研究,发现了双缓冲。如果我必须这样做,那么当合并成一个大类与单独的类时,为什么它会起作用? 这是我的JPanel类代码。有人能帮我吗?如果答案是双重缓冲,有人能给我解释一下吗。我知
我对此做了一些研究,发现了双缓冲。如果我必须这样做,那么当合并成一个大类与单独的类时,为什么它会起作用? 这是我的JPanel类代码。有人能帮我吗?如果答案是双重缓冲,有人能给我解释一下吗。我知道理论,但不知道代码
import java.awt.Graphics;
import javax.swing.JPanel;
import java.awt.Image;
import java.awt.Graphics2D;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class picPanel extends JPanel
{
walker w;
JPanel panel;
public picPanel()
{
w=new walker();
addKeyListener(new TAdapter());
setFocusable(true);
System.out.println(w.getX());
System.out.println(w.getY());
if(w.getImg()==null)
System.out.println("is emty");
repaint();
//test();
}
public void paintComponent(Graphics g)
{
System.out.println("Hello");
//Graphics2D g2d = (Graphics2D)g;
Image m = w.getImg();
g.drawImage(m,w.getX(),w.getY(),this);
}
private class TAdapter extends KeyAdapter
{
public void keyPressed(KeyEvent e)
{
w.keyPressed(e);
System.out.println("Hello");
repaint();
}
}
}
只需在
paintComponent
方法中调用super.paintComponent
关于代码的进一步说明
@Override
标记是一个好习惯。编译器不仅可以检查签名是否匹配,还可以让需要阅读您的代码的其他人更轻松地快速查看您添加了哪些方法,以及您只是重写了哪些方法您是否尝试添加一行
g.clearRect(0,0,getWidth(),getHeight())代码>在图像m=w.getImg()之前代码>。希望这就是你想要的…-)非常感谢。成功了。我将在将来发布更好的代码这是我的第一篇文章。