Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有调用KeyListener_Java_Swing - Fatal编程技术网

Java 没有调用KeyListener

Java 没有调用KeyListener,java,swing,Java,Swing,我有一个扩展JFrame的GUI类,还有一个单独的内部类keypresss扩展KeyAdapter。在我的GUI构造函数中,我将KeyAdapter的一个实例传递给addkeylister()。据我所知,这是我所需要做的一切,但由于某种原因,当我按下一个键时,它没有被调用 适用代码: public class GUI extends JFrame{ public GUIMaze(Options options){ addKeyListener(new KeyPresses());

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

适用代码:

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...
     }
  }
}
奇怪的是,在我进行重构之前,这段代码曾经是有效的。要么我删除了我需要的东西,要么我正在做与
按键冲突的其他事情


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

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


相反,建议您使用API,它为您提供了确定绑定应在什么焦点级别触发的控件。

因此,如果我理解正确,我的JFrame由于某种原因没有焦点,而KeyListener仅在JFrame收到击键时才侦听。如果JFrame或其任何子帧收到击键,键绑定将作出响应?这不是因为帧没有焦点,而是因为您注册的
KeyListener
组件没有或不能聚焦(大多数基本组件默认情况下不可聚焦)。但是,是的。如果您正确配置了键绑定,那么就不重要了JFrame没有getInputMap()函数……那么我应该如何在它上面使用键绑定呢?通常,我创建一个
JPanel
,并将其设置为frames
contentPane
JFrame没有getInputMap()功能…
-您可以使用框架的JRootPane。