Определение клавиш направления клавиатуры с помощью нажатых клавиш

StackOverflow https://stackoverflow.com/questions/573918

Вопрос

Добрый день всем,

Узнав здесь, что консоль 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 для получения полной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top