1

我正在为我的大学项目开发​​地图编辑器。而且我遇到了一个问题,即地图面板没有在应该监听关键事件。当我将 ToolBarPane(扩展 JPanel)与 JComponent(如 JButton)、在其上实现 ActionListener 的 JComboBox 以及地图面板(扩展 JPanel)一起添加到 Frame(我使用 BorderLayout)时,就会发生这种情况。我有 System.out.println 语句来测试是否收到按键,并且它没有打印,如果我删除工具栏,按键监听器再次工作,mouseListenner 就像 keyListener 一样被禁用,这意味着我可以t 处理按下事件等,但 mouseListener 工作正常,我仍然可以处理鼠标移动事件。

这是一个屏幕截图,它是如何在没有 ToolBarPane 的情况下工作的

http://img684.imageshack.us/img684/3232/sampleku.png

请注意,您可以使用鼠标将图像放在地图上,您也可以像激光工具一样使用鼠标选择图像,并且通过按数字键可以在不同图像之间切换,这工作正常,直到我添加显示的 ToolBarPane像这样:

img291.imageshack.us/img291/8020/failve.png (请在此之前添加http,我只能发布一个超链接)

(因为我是新用户,所以不能在这里发图片)

使用 ToolBarPane 时,我不再能够处理关键事件。

我想这可能是因为焦点以某种方式转移到了该面板,但根本不确定。

和身体知道这一点并且可以帮助我吗?

非常感谢

4

2 回答 2

4

我建议你使用InputMapandWHEN_ANCESTOR_OF_FOCUSED_COMPONENT或类似的东西。摘自如何使用键绑定

JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
组件包含(或者是)具有焦点的组件。此输入映射通常用于复合组件

这对我来说非常有效。查看我的另一篇文章以获取更多信息和实际代码示例:

Java中游戏的键盘输入

或本教程:

Swing:理解输入/动作映射

于 2010-05-08T05:24:33.520 回答
0

您不应该使用 KeyListener。

Swing 被设计为使用更加灵活的键绑定。查看我对Key Bindings的快速总结,其中还包括一个指向 Swing 教程的链接,其中包含更多细节。

(因为我是新用户,所以不能在这里发图片)

无论如何,图像并没有太大帮助。如果您需要更多帮助,请发布显示问题的SSCCE(在尝试上述建议后)。

于 2010-05-08T05:25:32.863 回答