私はJPanelでキーリスナーを実装しています。他のクラスから引っ張られたイメージを引き出して表示します。 NAキーリスナーは、そのクラスに渡され、多くの画像の1つを取得し、それを2つの方向に移動します。私の問題は、私がrepaint()を呼び出すと古い画像が消えないので、画像のラインが得られるということです。 私は画像とJPanelクラスのクラスを1つのバイ・ファイナルに組み込んだとき、それは完璧に機能しました。
私はこれに関するいくつかの研究を行い、私はダブルバッファリングを発見しました。私はこれをしなければならない場合、1つの大きなクラスと別のクラスを組み合わせるとなぜ機能するのでしょうか? 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();
}
}
}
'g.clearRect(0、0、getWidth()、getHeight());' 'Image m = w.getImg();'の前に行を追加しようとしましたか?これがあなたが望んだことを願っています。:-) –