KeyTyped事件不会注册

问题描述 投票:0回答:1

我正在学习如何使用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被初始化而没有被声明?

keylistener keyevent keyboard-input
1个回答
0
投票

根据the docs的关键类型事件:

输入字符时会生成此事件。

要确定事件的输入,您需要使用getKeyChar()方法而不是getKeyCode()方法,它始终是VK_UNDEFINED

© www.soinside.com 2019 - 2024. All rights reserved.