为什么 KeyEvent 虽然实现了 KeyListener 接口但不起作用?

Why the KeyEvent doesn't working though implemented KeyListener interface?

KeyDemo class 中我实现了 KeyListener 但我不明白为什么 KeyEvent 不起作用。我正在按键,但没有任何反应。这只是一个大 class 的短 Demo class。有人帮我解决这个问题。

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class KeyDemo extends JPanel implements KeyListener {

    public KeyDemo() {
        // TODO Auto-generated constructor stub
        addKeyListener(this);
    }

    @Override
    public void keyPressed(KeyEvent e) {

        switch (e.getKeyCode()) {
        case KeyEvent.VK_UP:
            System.out.println("moving up");
            break;
        case KeyEvent.VK_RIGHT:
            robot.moveRight();
            robot.setMovingRight(true);
            break;
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {

        switch (e.getKeyCode()) {
        case KeyEvent.VK_UP:
            System.out.println("stop moving up");
            break;
        case KeyEvent.VK_LEFT:
            robot.stopLeft();
            break;
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub

    }   
}

主要class:

public class Main{
    public static void main(String[] args){
        JFrame f = new JFrame();
        f.setSize(400, 400);
        f.setVisible(true);
        KeyDemo demo = new  KeyDemo();
        f.add(demo);
    }
}

可能是你的KeyDemoclass没有焦点。

无论如何,这些天,推荐的方法是使用键绑定:https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html

这是一个焦点问题。

尝试按 Tab 以在面板上获得焦点或调用

demo.requestFocus();