更改JPanel后的Java新Keylistener不';行不通

更改JPanel后的Java新Keylistener不';行不通,java,keylistener,Java,Keylistener,对于我的游戏,我正在为学校编写代码,我有以下问题: 当游戏开始时,它会将一个JPanel加载到框架中,并添加一些介绍内容。为了在一些图像之间切换,我添加了一个简单的keylistener。在那里完成所有操作后,它确实会从contentpane中删除所有内容并加载第一级。以下几行是为我做的: frame.getContentPane().removeAll(); frame.getContentPane().add(new level1()); frame.getConte

对于我的游戏,我正在为学校编写代码,我有以下问题:

当游戏开始时,它会将一个JPanel加载到框架中,并添加一些介绍内容。为了在一些图像之间切换,我添加了一个简单的keylistener。在那里完成所有操作后,它确实会从contentpane中删除所有内容并加载第一级。以下几行是为我做的:

    frame.getContentPane().removeAll();
    frame.getContentPane().add(new level1());
    frame.getContentPane().validate();
现在,我的第一个级别已成功加载,但keylistener已损坏。在我的public level1()中,我定义了一个新的KeyListener,但它不响应我的输入。如果我不切换JPanel,KeyListener将完全工作。重新加载新KeyListener的相关代码为:

    this.requestFocusInWindow();
    keylistener = new AL();
    addKeyListener(keylistener);
一切正常,例如敌人正在移动。但是KeyListener什么都不做

编辑:两个按键侦听器完全不同

问题已解决。
这就是为什么JPanel无法获得关注的原因。用我的更新方法,我知道确保在每一个滴答声中,我的JPanel都是专注的。这就解决了这个问题,但我不明白为什么单次焦点请求是不够的。

只有当在可见窗口中显示的组件上调用该方法时,
requestFocusInWindow()
方法才起作用。不要使用KeyListener。更好的解决方案是使用。我知道键绑定是更好的方法,但这只是学校的一个快速游戏,所以我不在乎。逻辑上,首先将JPanel加载到帧中,然后设置焦点。也许还为时过早,但谢谢你的回答。