web-dev-qa-db-ja.com

Javaで矢印キーを検出するにはどうすればよいですか?

私はキーリスナーを実装する方法を知っています。それは問題ではありません。

public void keyTyped(KeyEvent event) {
    if (event.getKeyChar() == KEY_LEFT) {
        cTDirection = LEFT;
    }
    if (event.getKeyChar() == 40) {
        cTDirection = DOWN;
    }
    if (event.getKeyChar() == 39) {
        cTDirection = RIGHT;
    }
    if (event.getKeyChar() == 38) {
        cTDirection = UP;
    }
}

どこに何を置くのですかLEFT_KEY/40/39/38?キーリスナーを作成してキーを入力すると、37〜40が得られたと思います。矢印キーだけをリッスンするためにそこに何を置くかわかりません。

9
Zeveso

私は使用をお勧めします:

if (event.getKeyCode() == KeyEvent.VK_UP) {
...
}

VK_DOWN, VK_LEFT, VK_RIGHTで繰り返す。

テンキーには、必要に応じてVK_KP_UP, VK_KP_DOWN, VK_KP_LEFT, VK_KP_RIGHTの個別のコードがあります。

すべてのコードについては KeyEvent を参照してください。

15
robert_x44

KeyEvent.VK_LEFTKeyEvent.VK_RIGHTなど.

また、getKeyCodeではなくgetKeyCharを使用する必要があります。 getKeyCharは、実際に文字(文字、数字、スペースなど)に対応するキー用です。

3

使用する

if ( e.getKeyCode() == KeyEvent.VK_LEFT){
     //Do something
}

その他のキーは次のとおりです。

KeyEvent.VK_UP

KeyEvent.VK_RIGHT

KeyEvent.VK_DOWN

これを機能させるために私がしたことは次のとおりです。

public void keyPressed (KeyEvent e) {
        int c = e.getKeyCode ();
        if (c==KeyEvent.VK_UP) {                
            b.y--;   
        } else if(c==KeyEvent.VK_DOWN) {                
            b.y++;   
        } else if(c==KeyEvent.VK_LEFT) {                
            b.x--;   
        } else if(c==KeyEvent.VK_RIGHT) {                
            b.x++;   
        }
        System.out.println (b.x);
        b.repaint ();
    }

私にとっては、KeyPressedに配置しても機能しませんが、KeyTypedに配置すると正常に機能します。

1
Abhas Tandon

最初にinitメソッドを宣言します

public void init(){

this.addKeyListener(new keyb());}

次に、KeyListnerを実装する内部クラスを使用します

class keyb implements KeyListener{

    public void keyPressed (KeyEvent e){
    if(e.getKeyCode()==KeyEvent.VK_UP){
        y-=50;

    }else if(e.getKeyCode()==KeyEvent.VK_DOWN){
        y+=50;
    }else if(e.getKeyCode()==KeyEvent.VK_RIGHT){            
        x+=50;
    }else if(e.getKeyCode()==KeyEvent.VK_LEFT){
        x-=50;
    }

    repaint();

    }
    public void keyReleased (KeyEvent e){}
    public void keyTyped (KeyEvent e){}
    }

あなたが知っているようにKeyreleased&keyTyped ....を書く代わりにアダプタを使うこともできます

0
ahmed reda

getKeyCode() メソッドを使用して、戻り値をもう一度比較しますKeyEvent.VK_LEFTKeyEvent.VK_RIGHTKeyEvent.VK_UPおよびKeyEvent.VK_DOWN定数。

0
Progman