问题
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?
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();
}
}
回答1:
What you should do is look at the virtual key code rather than the key character, in keyPressed
. Like so:
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.html for full information.
来源:https://stackoverflow.com/questions/573918/detecting-keyboard-direction-keys-using-keypressed