Java 没有调用KeyListener
我有一个扩展JFrame的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());
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
,并将其设置为framescontentPane
JFrame没有getInputMap()功能…
-您可以使用框架的JRootPane。