使用keyPressed检测键盘方向键

G’day全部,

在这里了解到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(); } } 

你应该做的是在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; } } 

有关完整信息,请参阅http://java.sun.com/javase/6/docs/api/java/awt/event/KeyEvent.html 。