在我的应用程序中,我希望将鼠标和键盘事件转发到一个不可见的JPanel,并希望该JPanel像处理来自EDT的事件一样处理它们。这样做的原因是因为应用程序有一个可选的扩展来使用JOGL进行一些渲染。我已经用Swing编写了GUI的东西,所以我想重用这些代码。不幸的是,您不能将Swing与JOGL的GLCanvas混合使用(我可以使用GLJpanel,但这太慢了,无法使用)。JOGL确实有一个特性(Overlay),它允许您绘制到Graphics实例,以便在GL上下文中绘制它。因此,我可以调用jpanel.paint(g)来使用覆盖将其绘制到屏幕上,这很好用。剩下的唯一难题就是以某种方式使用GLCanvas上的鼠标和键盘侦听器来接收和转发事件到JPanel。
我曾尝试使用findComponentAt(mousex,mouse )在JPanel上的特定位置获取一个组件,然后对该组件调用dispatchEvent,但这些组件不会对鼠标单击或任何其他操作做出反应。我假设EDT会将鼠标事件/关键事件转换为ActionEvent,以使按钮和文本字段正常工作。如果最坏的情况发生,我可以测试组件是否是JButton,并使用doClick,这至少会给我一些功能。但这对非按钮组件不起作用,它不会做任何按钮悬停,等等。我知道我可能应该使用HTML工具包(例如,FengGUI),但我依赖于Swing的OpenGL渲染功能,我不想重写那些代码。
我如何正确地从GLCanvas接收MouseEvents,并将它们转发到JPanel,以便进行适当的处理?(例如,按钮的动作侦听器被激活,按钮悬停时显示不同的图形,等等)
任何建议我们都将不胜感激。
发布于 2011-07-10 08:22:14
在中,GlassPaneDemo在方法redispatchMouseEvent()中显示了一种方法。
https://stackoverflow.com/questions/6637771
复制相似问题