java - KeyListener 不起作用,但 Mousepressed 起作用

标签 java user-interface io keylistener keyevent

这是我的代码的简化版本

public class StateController extends GraphicsProgram {

    public Menu menu = new Menu();

    public void run() {
        addMouseListeners();
        addKeyListeners();
    }

}

public class Menu {
    int x = 0;

    public void keyPressed(KeyEvent e) {
       System.out.println(x);
    }

    public void mousePressed(MousEvent e) {
       System.out.println(x);
    }

}

程序会检测鼠标何时被按下,但当按下某个键时它不会打印 X。你能看出什么问题吗?

非常感谢。

最佳答案

假设您的代码实际编译并且您正确实现了 KeyListener 接口(interface),则 KeyEvent 只会分派(dispatch)到具有焦点的组件。您的 StateController 没有焦点。

默认情况下,JPanel 不可聚焦。所以我猜你的 StateController 类正在扩展 JPanel。所以你需要:

  1. 通过在类的构造函数中使用 setFocusable(true) 使面板可聚焦
  2. 在 GUI 可见后调用 panel.requestFocusInWindow()。您只能请求关注可见 GUI 中的组件。

关于java - KeyListener 不起作用,但 Mousepressed 起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27508525/

相关文章:

java - 如何估算总 IO

java - 如何在 JavaFX 中对任务进行排队?

java - 从接口(interface) Spring @RequestBody

python - QListView 中自定义 IndexWidget 的平滑延迟加载和卸载

java - Vaadin 中带 slider 的水平按钮栏

c# - Ultragrid 子行

c++ - 如何检查 std::cin 是否与终端或管道关联

java - 运行本地 Apache、Java 和 PHP 本地服务器的不同方法?

java - 检查各个地方后,程序在 android/Eclipse 中返回相同的经度和纬度

haskell - 如何重构才不会卡在IO monad里?