我如何检查用户是否按下了一个键?

在Java中,我有一个程序,需要连续检查用户是否按下一个键。 所以在psuedocode,像是

if (isPressing("w")) { //do somthing } 

提前致谢!

在Java中,你不检查是否按了一个键,而是你 KeyEvent 。 实现您的目标的正确方法是注册一个KeyEventDispatcher ,并实现它以维护所需密钥的状态:

 import java.awt.KeyEventDispatcher; import java.awt.KeyboardFocusManager; import java.awt.event.KeyEvent; public class IsKeyPressed { private static volatile boolean wPressed = false; public static boolean isWPressed() { synchronized (IsKeyPressed.class) { return wPressed; } } public static void main(String[] args) { KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() { @Override public boolean dispatchKeyEvent(KeyEvent ke) { synchronized (IsKeyPressed.class) { switch (ke.getID()) { case KeyEvent.KEY_PRESSED: if (ke.getKeyCode() == KeyEvent.VK_W) { wPressed = true; } break; case KeyEvent.KEY_RELEASED: if (ke.getKeyCode() == KeyEvent.VK_W) { wPressed = false; } break; } return false; } } }); } } 

那么你可以随时使用:

 if (IsKeyPressed.isWPressed()) { // do your thing. } 

当然,您可以使用相同的方法来实现isPressing("<some key>")并带有包含在IsKeyPressed的键映射和状态。

你必须实现KeyListener ,看看这里: http : //docs.oracle.com/javase/7/docs/api/java/awt/event/KeyListener.html

有关如何使用它的更多细节: http : //docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html

希望它能工作:

  import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.JFrame; import javax.swing.JTextField; public class Main { public static void main(String[] argv) throws Exception { JTextField textField = new JTextField(); textField.addKeyListener(new Keychecker()); JFrame jframe = new JFrame(); jframe.add(textField); jframe.setSize(400, 350); jframe.setVisible(true); } } class Keychecker extends KeyAdapter { @Override public void keyPressed(KeyEvent event) { char ch = event.getKeyChar(); System.out.println(event.getKeyChar()); } } }