Java 图像没有重新绘制,只是相乘

Java 图像没有重新绘制,只是相乘,java,image,swing,jpanel,repaint,Java,Image,Swing,Jpanel,Repaint,我有一个JPanel实现了一个键侦听器。它提取并显示从另一个类中提取的图像。NA将密钥侦听器传递给该类,以获取多个图像中的一个,并将其向一个方向移动2px。我的问题是,调用repaint()时,旧图像不会消失,因此我会得到一行图像。 问题是,当我将类与图像和JPanel类组合成一个双决赛时,效果非常好。 我对此做了一些研究,发现了双缓冲。如果我必须这样做,那么当合并成一个大类与单独的类时,为什么它会起作用? 这是我的JPanel类代码。有人能帮我吗?如果答案是双重缓冲,有人能给我解释一下吗。我知

我有一个JPanel实现了一个键侦听器。它提取并显示从另一个类中提取的图像。NA将密钥侦听器传递给该类,以获取多个图像中的一个,并将其向一个方向移动2px。我的问题是,调用repaint()时,旧图像不会消失,因此我会得到一行图像。 问题是,当我将类与图像和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

关于代码的进一步说明

  • Swing设计用于与
  • 为了便于他人阅读您的代码,请遵守以下规则,例如,类以大写字母开头,变量以小写字母开头
  • 重写方法时添加
    @Override
    标记是一个好习惯。编译器不仅可以检查签名是否匹配,还可以让需要阅读您的代码的其他人更轻松地快速查看您添加了哪些方法,以及您只是重写了哪些方法

  • 您是否尝试添加一行
    g.clearRect(0,0,getWidth(),getHeight())
    图像m=w.getImg()之前。希望这就是你想要的…-)非常感谢。成功了。我将在将来发布更好的代码这是我的第一篇文章。