我正在为我的大学项目编写地图编辑器。而且我遇到了一个问题,即地图面板不应该正在监听关键事件。 当我添加一个ToolBarPane(扩展JPanel)时,会发生这种情况,例如JButton,JComboBox,它实现了ActionListener,地图面板(将JPanel扩展)一起放到了Frame(我使用了BorderLayout)。我有System.out.println语句来测试是否收到按键,并且它不打印,如果我删除了ToolBar,键监听器再次工作,那么mouseListenner被禁用就像keyListener一样,这意味着我可以' t处理新闻事件等,但mouseListener工作正常,我仍然可以处理鼠标移动事件。
以下是没有ToolBarPane
的屏幕截图http://img684.imageshack.us/img684/3232/sampleku.png
请注意,您可以使用鼠标将图像放在地图上,也可以像使用激光工具一样使用鼠标选择图像,按数字键可以在不同的图像之间切换,这样做可以直到我添加ToolBarPane显示如下:
img291.imageshack.us/img291/8020/failve.png (请在此之前添加http,我只能发布一个超链接)
(我不能在这里发布图片,因为我是新用户)
使用ToolBarPane,我无法再处理关键事件。
我想可能的焦点是以某种方式转移到该面板,但根本不确定。
身体是否知道这一点并且可以帮助我?
非常感谢
答案 0 :(得分:4)
我建议您使用InputMap
和WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
或类似内容。摘录自How to Use Key Bindings:
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
该组件包含(或是)具有焦点的组件。此输入映射通常用于复合组件
这对我来说非常有效。有关更多信息和实际代码示例,请查看我的其他帖子:
Keyboard input for a game in Java
或本教程:
答案 1 :(得分:0)
您不应该使用KeyListener。
Swing旨在使用Key Bindings,它更加灵活。查看我的Key Bindings快速摘要,其中还包含Swing教程的链接,该教程更加详细。
(我不能在这里发布图片,因为我是新用户)
无论如何,图像无济于事。如果您需要更多帮助,请发布显示问题的SSCCE(在尝试上述建议后)。