2

JPanelにキーリスナーを実装してもらいました。別のクラスから取得した画像を取得して表示します。NAキーリスナーはそのクラスに渡され、多くの画像の1つを取得して、ある方向に2px移動します。私の問題は、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();

   }
  }
 }
4

1 に答える 1

3

メソッドsuper.paintComponentを呼び出すだけです。paintComponent

コードに関するその他のコメント

  1. Swing はKeyBindings iso KeyListenersで動作するように設計されています
  2. 他の人がコードを読みやすくするために、Java の命名規則やコード規則を尊重してください。たとえば、クラスは大文字で始まり、変数は小文字で始まります。
  3. @Overrideメソッドをオーバーライドするときにタグを追加するのは良い習慣です。コンパイラは署名が一致することを確認するだけでなく、コードを読まなければならない他の誰かが、追加したメソッドと単純にオーバーライドしたメソッドを簡単に確認できます。
于 2012-05-05T06:54:41.173 に答える