java 使用 keyPressed 检测键盘方向键
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/573918/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Detecting keyboard direction keys using keyPressed
提问by elwynn
G'day all,
大家好,
After learning on here that the Java console doesn't support keyboard input a great deal, I switched to Swing and AWT. My problem now is how to detect when the keyboard direction keys (non-numeric keypad) are used. My code (below) does not do more than print a "small box" character when pressing the down, up, left, right keys. This small box character is no different from the character used by the CTRL and ALT keys, for example. Does anyone know what the identity of the keyboard direction keys actually is so that I can code for them in my application?
在这里了解到 Java 控制台不支持键盘输入后,我切换到 Swing 和 AWT。我现在的问题是如何检测何时使用键盘方向键(非数字小键盘)。我的代码(如下)在按向下、向上、向左、向右键时不会做更多的打印“小框”字符。例如,这个小方框字符与 CTRL 和 ALT 键使用的字符没有区别。有谁知道键盘方向键的实际身份是什么,以便我可以在我的应用程序中为它们编码?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KeyChecker extends JFrame {
JLabel keyLabel = new JLabel("Hit any key");
public KeyChecker() {
super("Hit a Key");
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout(FlowLayout.CENTER));
KeyMonitor monitor = new KeyMonitor(this);
setFocusable(true);
addKeyListener(monitor);
add(keyLabel);
setVisible(true);
}
public static void main(String[] arguments) {
new KeyChecker();
}
}
class KeyMonitor extends KeyAdapter {
KeyChecker display;
KeyMonitor(KeyChecker display) {
this.display = display;
}
public void keyPressed(KeyEvent event) {
display.keyLabel.setText("" + event.getKeyChar());
display.repaint();
}
}
回答by David Z
What you should do is look at the virtual key coderather than the key character, in keyPressed. Like so:
您应该做的是查看虚拟键码而不是键字符,在keyPressed. 像这样:
public void keyPressed(KeyEvent event) {
switch (event.getKeyCode()) {
case KeyEvent.VK_UP:
// up arrow
break;
case KeyEvent.VK_DOWN:
// down arrow
break;
case KeyEvent.VK_RIGHT:
// right arrow
break;
case KeyEvent.VK_LEFT:
// left arrow
break;
}
}
See http://java.sun.com/javase/6/docs/api/java/awt/event/KeyEvent.htmlfor full information.
有关完整信息,请参阅http://java.sun.com/javase/6/docs/api/java/awt/event/KeyEvent.html。

