La detección de teclado teclas de dirección utilizando keyPressed

¡Buen día a todos,

Después de aprender que la de la consola de Java no soporta la entrada de teclado mucho, me cambié a Swing y AWT. Mi problema ahora es cómo detectar cuando el teclado teclas de dirección (no del teclado numérico) se utilizan. Mi código (a continuación) no hacen más que imprimir un «pequeño cuadro de» carácter cuando se presiona abajo, arriba, izquierda, derecha teclas. Este pequeño cuadro de caracteres no es diferente de los caracteres utilizados por las teclas CTRL y ALT, por ejemplo. ¿Alguien sabe qué es la identidad del teclado teclas de dirección realidad es que me puede el código de mi aplicación?

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();
    }
}
InformationsquelleAutor elwynn | 2009-02-21

1 Kommentar

  1. 2

    Lo que usted debe hacer es mirar en el código de tecla virtual más que el personaje clave, en keyPressed. Así:

    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;
        }
    }

    Ver http://java.sun.com/javase/6/docs/api/java/awt/event/KeyEvent.html para obtener la información completa.

    • Excelente. Gracias David, muy apreciado.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein