私はキーリスナーを実装する方法を知っています。それは問題ではありません。
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が得られたと思います。矢印キーだけをリッスンするためにそこに何を置くかわかりません。
私は使用をお勧めします:
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 を参照してください。
KeyEvent.VK_LEFT
、KeyEvent.VK_RIGHT
など.
また、getKeyCode
ではなくgetKeyChar
を使用する必要があります。 getKeyChar
は、実際に文字(文字、数字、スペースなど)に対応するキー用です。
使用する
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に配置すると正常に機能します。
最初に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 ....を書く代わりにアダプタを使うこともできます
getKeyCode()
メソッドを使用して、戻り値をもう一度比較しますKeyEvent.VK_LEFT
、KeyEvent.VK_RIGHT
、KeyEvent.VK_UP
およびKeyEvent.VK_DOWN
定数。