如何在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_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) { 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_LEFT
, KeyEvent.VK_RIGHT
, KeyEvent.VK_UP
和KeyEvent.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