1. ホーム
  2. java

[解決済み] KeyListenerの使用方法

2022-03-01 01:24:40

質問

現在、プログラムにキーリスターを実装して、矢印キーを押したときに、プログラム内のオブジェクトが左か右に移動するような動作をさせようとしています。

以下は、私のプログラムでの移動方法です。

public void moveDirection(KeyEvent e)
    {
        int move = 0;
        int r = K.getRow();
        int c = K.getCol();
        if (e.getKeyCode() == 39) move = 1; //KeyEvent.VK_RIGHT
        if (e.getKeyCode() == 37) move = 2; //KeyEvent.VK_LEFT
        //if (e.getKeyCode() == KeyEvent.VK_DOWN) move = 3;

        switch (move)
        {
            case 1: if (inBound(r, c+1))
                        K.setLocation(r ,c+1); 
                    if (inBound(r, c-1) && frame2[r][c-1] == K)
                        frame2[K.getRow()][K.getCol()-1] = null; 
                    break; //move right 39
            case 2: K.setLocation(K.getRow(), K.getCol()-1); break; //move left 37
            //case 3: b.setLocation(b.getRow()+1, b.getCol()); break; //move down
            default: return;
        }        
        processBlockList();
    }

プログラムはどのように(KeyEvent)eを読み込むようになっているのか気になります。本当に矢印キーを入力することはできないので...。

助けてください!

edit: プログラムがキー入力を約700ミリ秒待ってから別のメソッドに移るようにするには、コードに何を追加する必要があるのかも教えてください。

どのように解決するのですか?

http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html このチュートリアルを見る

UIベースのアプリケーションの場合、「キー入力があるまで約700ミリ秒待ってから別のメソッドに移るようにするには、コードに何を追加する必要があるか」を知る必要があります。

キーイベントの場合

public void keyPressed(KeyEvent e) {

    int key = e.getKeyCode();

    if (key == KeyEvent.VK_LEFT) {
        dx = -1;
    }

    if (key == KeyEvent.VK_RIGHT) {
        dx = 1;
    }

    if (key == KeyEvent.VK_UP) {
        dy = -1;
    }

    if (key == KeyEvent.VK_DOWN) {
        dy = 1;
    }
}

このゲームの例をチェック http://zetcode.com/tutorials/javagamestutorial/movingsprites/