문제

g'day 모두,

여기에서 Java 콘솔이 키보드 입력을 많이 지원하지 않는다는 것을 알게 된 후 Swing and Awt로 전환했습니다. 내 문제는 이제 키보드 방향 키 (숫자가 아닌 키패드)가 사용되는 시점을 감지하는 방법입니다. 내 코드 (아래)는 아래쪽, 위, 왼쪽, 오른쪽 키를 누를 때 "작은 상자"문자를 인쇄하는 것 이상을 수행하지 않습니다. 이 작은 상자 문자는 예를 들어 CTRL 및 ALT 키가 사용하는 문자와 다르지 않습니다. 키보드 방향 키의 ID가 실제로 무엇인지 아는 사람이 있습니까?

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