java - KeyListener 仅在单击 Canvas 后才激活

标签 java swing canvas focus keylistener

我有一个实现 KeyListener 的类,一切正常,但有一个小问题,我的 KeyListener 仅在单击 Canvas 后才起作用,所以如果我开始一个游戏,我必须点击一次,然后我才能使用我的键盘,代码:

public class Game extends Canvas implements Runnable {
    ....
    initGame() {
        ...
        addKeyListener(new Keyboard());
        setFocusable(true);
    }

    private class Keyboard implements KeyListener {
        ...
    }
}

-有没有一种方法可以让我的 Canvas 在创建后“活跃”?

最佳答案

KeyListener 仅当其注册的组件可聚焦且具有焦点时才会响应按键事件。

虽然您可以使用 requestFocusInWindow,但不能保证焦点将转移到组件,如果由于某种原因失去焦点(您单击另一个组件),那么您将回到第一个方向.

更好的解决方案是使用基于 JComoponet 的组件(如 JPanel)并利用 Key Bindings API允许您定义触发关键事件的焦点级别

关于java - KeyListener 仅在单击 Canvas 后才激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22724286/

相关文章:

javascript - 使用用户输入在 SVG 和 HTML 中绘制和动画三 Angular 形

java - jar 的 Ant 任务

java - 如何在 Java 中生成包含 N 个可能元素 (M > N) 的数组列表(长度均为 M)?

java - 滑动任何 JPanel

java - 从绝对文件路径创建动态 JTree

java - 从另一个类更新 swing 组件

java - 使用 Lambda Java 转换 List 类型

java - 类型映射 MySQL 类型文本到 Java Hibernate

javascript - 当我使用弧度将半圆分成四个部分时,看起来我没有得到一条直线

javascript - 如何在 HTML5 Canvas 中找到一条线的坐标