События KeyTyped не будут регистрироваться - PullRequest
0 голосов
/ 06 сентября 2018

Я учусь кодировать ввод с клавиатуры с помощью keylistener. Я понял, что работает со следующей программой:

import java.awt.event.*;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class KeyboardInput extends JFrame implements KeyListener {

    public KeyboardInput(String s) {
        super(s);
        JPanel panel = new JPanel();
        JLabel label = new JLabel();
        panel.add(label);
        add(panel);
        addKeyListener(this);
        setSize(200, 100);
        setVisible(true);
    }

    public void keyTyped(KeyEvent event) {
        KeyEvent e = event;

        switch(e.getKeyCode()) {
        case java.awt.event.KeyEvent.VK_A:  System.out.println("A");
        case java.awt.event.KeyEvent.VK_D:  System.out.println("D");
        case java.awt.event.KeyEvent.VK_S:  System.out.println("S");
        case java.awt.event.KeyEvent.VK_W:  System.out.println("W");
        case java.awt.event.KeyEvent.VK_SPACE: System.out.println("Space");

        }

        if (e.getKeyCode() == java.awt.event.KeyEvent.VK_0) {
            System.out.println("0");
        }

    }

    public void keyPressed(KeyEvent event) {
        if(event.getKeyCode() == java.awt.event.KeyEvent.VK_W) {
            System.out.println("W");
        }

    }

    public void keyReleased(KeyEvent e) {
        // nothing yet

    }

}


public class Core {

public static boolean isRunning = true;

public static void main(String args[]) {

    new KeyboardInput("Keyboard Input Testing");

}
}

К сожалению, есть одна большая проблема: пока работают события keyPressed, а события keyTyped - нет. Это ошибка в моем коде, или это может быть из-за неисправной клавиатуры?

Дополнительный уточняющий вопрос, который у меня возникает, заключается в том, почему KeyboardInput инициализируется в основном классе, инициализированном без объявления?

1 Ответ

0 голосов
/ 16 сентября 2018

Согласно документам для событий, набранных ключом:

Это событие генерируется при вводе символа.

Чтобы определить входные данные из события, вам необходимо использовать метод getKeyChar(), а не метод getKeyCode(), который всегда будет VK_UNDEFINED.

...