2012-05-05 11 views
2

私は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(); 

    } 
    } 
} 
+0

'g.clearRect(0、0、getWidth()、getHeight());' 'Image m = w.getImg();'の前に行を追加しようとしましたか?これがあなたが望んだことを願っています。:-) –

答えて

3

ちょうどあなたのpaintComponent方法でsuper.paintComponentを呼び出します。あなたのコードについて

さらにいくつかの発言が

  1. スイングが、それは簡単に他の人があなたのコードを読んでできるようにすることKeyBindings iso KeyListeners
  2. で動作するように設計され、例えば、Java naming/code conventionsを尊重してくださいクラスは大文字で始まり、小文字の変数で始まります。
  3. メソッドをオーバーライドするときに@Overrideタグを追加するのは良い習慣です。コンパイラは、シグネチャが一致するかどうかをチェックするだけでなく、追加したメソッドをすばやく確認し、オーバーライドするだけでコードを読み取らなければならない他の人にとっても簡単です。
+0

ありがとう。出来た。私は将来このコードを私の最初の投稿として投稿します。 – user1376339

関連する問題