Java 当有一个子组件上有JButton时,JPanel不侦听键事件

Java 当有一个子组件上有JButton时,JPanel不侦听键事件,java,jpanel,keylistener,jcomponent,Java,Jpanel,Keylistener,Jcomponent,我正在为我的大学项目做一个地图编辑器。我遇到了一个问题,地图面板没有监听关键事件。 当我将一个工具栏窗格(它扩展了JPanel)和JC组件(比如JButton、在其上实现ActionListener的JComboBox以及地图面板(它扩展了JPanel)一起添加到框架(我使用了BorderLayout)上时,就会发生这种情况。我有System.out.println语句来测试是否接收到按键,但它没有打印,如果我移除工具栏,按键侦听器会再次工作,mouseListener也会像keyListene

我正在为我的大学项目做一个地图编辑器。我遇到了一个问题,地图面板没有监听关键事件。 当我将一个工具栏窗格(它扩展了JPanel)和JC组件(比如JButton、在其上实现ActionListener的JComboBox以及地图面板(它扩展了JPanel)一起添加到框架(我使用了BorderLayout)上时,就会发生这种情况。我有System.out.println语句来测试是否接收到按键,但它没有打印,如果我移除工具栏,按键侦听器会再次工作,mouseListener也会像keyListener一样被禁用,这意味着我无法处理按键事件等,但mouseListener工作正常,我仍然可以处理鼠标移动事件

下面是一个屏幕截图,它在没有工具栏窗格的情况下是如何工作的

请注意,您可以使用鼠标将图像放置在地图上,也可以像激光工具一样使用鼠标选择图像,通过按数字键可以在不同的图像之间切换,这很好,直到我添加工具栏窗格,它显示如下:

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

(我不能在此发布图像,因为我是新用户)

打开工具栏窗格后,我无法再处理按键事件

我想可能是因为焦点不知何故转移到了那个小组,但一点也不确定

你和body知道这一点并能帮我吗


非常感谢

我建议您使用
InputMap
当\u聚焦\u组件的\u祖先\u
或类似的东西时。摘录自:

JComponent.当聚焦组件的祖先时
组件包含(或是)具有焦点的组件。此输入映射通常用于复合组件

这对我来说非常有效。有关更多信息和实际代码示例,请参阅我的另一篇文章:

或本教程:


我建议您使用
InputMap
作为\u聚焦\u组件的祖先\u
或类似的东西。摘录自:

JComponent.当聚焦组件的祖先时
组件包含(或是)具有焦点的组件。此输入映射通常用于复合组件

这对我来说非常有效。有关更多信息和实际代码示例,请参阅我的另一篇文章:

或本教程:


您不应该使用KeyListener

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

(我不能在此发布图像,因为我是新用户)


不管怎么说,一张图片也帮不了什么忙。如果您需要更多帮助,请在尝试上述建议后发布您的文章,其中显示了问题

您不应该使用KeyListener

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

(我不能在此发布图像,因为我是新用户)

不管怎么说,一张图片也帮不了什么忙。如果您需要更多帮助,请在尝试上述建议后发布您的文章,其中显示了问题