java - 为什么 KeyEvent 虽然实现了 KeyListener 接口(interface)但不起作用?

标签 java jpanel keylistener keyevent

KeyDemo i 类实现 KeyListener但我不明白为什么 KeyEvent不工作。我正在按 键,但什么也没有发生。这只是一个简短的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

    }   
}

主类:

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

最佳答案

这是一个焦点问题。

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

demo.requestFocus();

关于java - 为什么 KeyEvent 虽然实现了 KeyListener 接口(interface)但不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34265901/

相关文章:

java - 使用二维并行数组存储数据

java - 为什么JPanel的子类 "TwoButtons"没有显示在屏幕上

多个 JPanel 的 Java swing 按键绑定(bind)

java - JPA/Hibernate 选择查询返回重复记录

java - 尝试将对象存储在该类型的变量中时,类型不兼容

java - 将 JPanel 置于 Controller 之上

Java setBounds 不适用于 JPanel

java - 如何在Java中正确使用keyListener

java - 在 Java 游戏中,按下一个键会取消仍然按下的另一个键

java - 如何通过发送 POST 查询通过 URL 打开新页面?