0

オブジェクトを左または右に移動するプログラムがあります。マウスリスナーとキーリスナーの両方で動作するように活用したいと思います。左矢印キーとマウスの左クリックの両方で同じオプションを実行します。マウスの右キーまたは矢印キーの場合はその逆です。私のコードは現在このようになっています。不要な部分をいくつか切り取っています。

public class TetrisApplet extends JApplet implements MouseListener, KeyListener {

public void init() {

        tetris.addMouseListener(this);
        tetris.addKeyListener(this);

public void mouseReleased(MouseEvent e) {
        if (e.getButton() == MouseEvent.BUTTON1) {
            if (x > 0 && a[x - 1][y] == 0) {
                shape.move(-20, 0);
                x--;
            }
        }
        if (e.getButton() == MouseEvent.BUTTON3) {
            if (x < 9 && a[x + 1][y] == 0) {
                shape.move(+20, 0);
                x++;
            }
        }

    }

    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        switch (keyCode) {
            case KeyEvent.VK_LEFT:
                if (x > 0 && a[x - 1][y] == 0) {
                    shape.move(-20, 0);
                    x--;
                }
                break;
            case KeyEvent.VK_RIGHT:
                if (x < 9 && a[x + 1][y] == 0) {
                    shape.move(+20, 0);
                    x++;
                }
                break;
        }
    }

だから私の質問は、なぜそれがキーに対して機能しないのかについて誰かが答えを持っていますか? 私のプログラムでは、マウス クリックを使用してオブジェクトを移動できますが、左矢印キーと右矢印キーを押しても何も起こりません。そして、なぜそれが機能しないのかわかりません。私が見逃しているのはおそらく小さなことだと思いますが、どんな助けでも大歓迎です。

4

1 に答える 1

3

問題は集中力にあると思います。フォーカスのあるコンポーネントは、コンポーネントの代わりにキーイベントを取得しますtetris(フォーカスを取得する方法はありません)。

簡単な修正は、次を追加することです。

tetris.requestFocus();

正しいコンポーネント (?)initでフォーカスを開始するため、メソッドで、フォーカスを再度取得できるようにするためです。mouseReleased

于 2012-12-08T12:07:20.940 に答える