我有一个扩展JFrame的GUI类,和一个扩展了KeyPresses的单独的内部类KeyAdapter。在GUI的构造函数中,我将KeyAdapter的实例传递给addKeyListener()。据我所知,这只是我要做的,但是由于某种原因,当我按下一个键时并没有调用它。

适用代码:

public class GUI extends JFrame{
  public GUIMaze(Options options){
    addKeyListener(new KeyPresses());
    ...more code...
  }
  private class KeyPresses extends KeyAdapter{
     @Override
     public void keyPressed(KeyEvent e){
        ...code that is not being run...
     }
  }
}


奇怪的是,在执行一些重构之前,该代码曾经可以正常工作。我删除了我需要的东西,或者我正在做与KeyPresses冲突的其他事情。

我只有1个KeyListener,而我的MouseListener工作正常。

最佳答案

这是KeyListener的常见问题。 KeyListener仅在其所连接的组件可聚焦并且具有键盘焦点时才会引发事件。

相反,建议您使用Key Bindings API,该API为您提供控件来确定应在哪个焦点级别触发绑定。

10-07 16:35