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