如何在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 / LEFT_KEY放在哪里? 当我创建一个keylistener并键入键时,我相信我得到了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_LEFTKeyEvent.VK_RIGHT

此外,您应该使用getKeyCode ,而不是getKeyChargetKeyChar用于实际对应于字符(字母,数字,空格等)的键。

使用

 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) { by--; } else if(c==KeyEvent.VK_DOWN) { b.y++; } else if(c==KeyEvent.VK_LEFT) { bx--; } else if(c==KeyEvent.VK_RIGHT) { b.x++; } System.out.println (bx); b.repaint (); } 

对我来说,如果我把它放在KeyPressed中它是行不通的,但是如果我把它放在KeyTyped中就可以正常工作。

使用getKeyCode()方法并再次比较KeyEvent.VK_LEFTKeyEvent.VK_RIGHTKeyEvent.VK_UPKeyEvent.VK_DOWN常量返回的值。

首先声明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 ….

btw in KeyAdapter – > keyTyped getCharCode()不起作用你应该试试keyPressed或keyReleased