0

JPanel私は矢印キーで移動しようとしています。機能していません。を拡張するのは私の内部クラスだと思いますKeyAdapterActionListenerまた、実装されているかどうかもわかりません。私が作成した他のクラスは、単なるフレームなので問題ありません。

package jerryWorlds;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Jerry extends JPanel implements ActionListener{

int SizeX, SizeY, PosX, PosY, VelX, VelY;
Image img;
Timer time = new Timer(1, this);

public Jerry(){
    ImageIcon i = new ImageIcon();
    addKeyListener(new AL());
    time.start();
    img = i.getImage();
    PosX = 375;
    PosY = 250;
}

public void paint(Graphics g){
    Graphics2D g2d = (Graphics2D)g;
    g2d.fillRect(PosX, PosY, 50, 100);
}
public void actionPerformed(ActionEvent e) {
    PosX = PosX + VelX;
    repaint();
}

private class AL extends KeyAdapter{
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        System.out.println("YAY!");
        if(key == KeyEvent.VK_LEFT)
            VelX = -1;
        else if(key == KeyEvent.VK_RIGHT)
            VelX = 1;
    }

    public void keyReleased(KeyEvent e) {
        int key = e.getKeyCode();
        if(key == KeyEvent.VK_LEFT)
            VelX = 0;
        else if(key == KeyEvent.VK_RIGHT)
            VelX = 0;
    }
}

}
4

1 に答える 1

5
  • 通常、同じ問題と同じ回答があるため、このサイトで同様の質問を検索することをお勧めします。
  • コンポーネントの KeyListener はフォーカスがない限り機能しないため、フォーカスが 1 つの問題であることがわかります。
  • 彼らは、KeyListener を使用するのではなく、キー バインディングを使用する必要があることを教えてくれます。
  • コンポーネントの境界線と子の描画をオーバーライドしたいことが確実でない限り、オーバーライドしないように指示されます(そうではありませんpaint(...))。paintComponent(...)
  • の中で必ずスーパーメソッドを呼び出すように指示されますpaintComponent(...)

また、こちらのアニメーションとキー割り当ての例もご覧ください。

于 2013-06-22T01:24:46.597 に答える