java - 为什么我的 KeyListener 不读取按键?

标签 java swing user-interface keyboard

我正在使用 JPanelGraphics 来制作游戏。我已经实现了一个 KeyListener 并将其添加到我的 JPanel 中。但是,我无法让它读取键码。我添加了一条打印语句,我认为只要按下某个键就会打印该语句,但我按下的所有键都没有返回代码。这是我的 JPanel 构造函数:

public Game()
{
    super();
    JPanel mazepanel = new JPanel();
    this.add(mazepanel);
    this.setVisible(true);
    this.addMouseListener(this);
    this.addKeyListener(this);
}

这是我的KeyListener

public void keyTyped(KeyEvent kb)
{
    System.out.println("Key pressed: " + kb.getKeyCode());
    if (kb.getKeyCode() == KeyEvent.VK_UP)
    {
        forward = true;
    }
    else if (kb.getKeyCode() == KeyEvent.VK_LEFT)
    {
        left = true;
    }
    else if (kb.getKeyCode() == KeyEvent.VK_RIGHT)
    {
        right = true;
    }
    else if (kb.getKeyCode() == KeyEvent.VK_DOWN)
    {
        back = true;
    }
    else
    {

    }

    this.repaint();
}

最佳答案

默认情况下,您的 JPanel 不可聚焦。添加

setFocusable(true);

做到这一点。

关于java - 为什么我的 KeyListener 不读取按键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27301055/

相关文章:

java - 如何在 Java 中创建对象对或组织我的代码

java - 滚动 java 2d 游戏图 block map ,同时生成附加图 block

windows - 使用 Windows 7 风格的消息框

css - 网站显示与智能手机不兼容

java - "postpone"任务真的那么难(或 "wait for idle")

java - 解析 LocalDateTime (Java 8) 时无法从 TemporalAccessor 获取 LocalDateTime

java - while(true) 和 wait() 或线程 join() 之间有什么区别

java - 更改 java JFrame 的图 block

java - 将 jpanel 定位在底部

java - 是否有 "rearrangable accordian"组件的 Swing 实现?或者它叫什么?