Определение клавиш направления клавиатуры с помощью нажатых клавиш
Вопрос
Добрый день всем,
Узнав здесь, что консоль 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 для получения полной информации.