模拟事件调度线程

时间:2011-07-09 22:02:50

标签: java swing jogl

在我的应用程序中,我想将鼠标和键盘事件转发给不可见的JPanel,我希望JPanel能够处理它们,就像它们来自EDT一样。原因是因为应用程序有一个可选扩展来使用JOGL进行渲染。我已经在Swing中编写了GUI内容,因此我想重用该代码。不幸的是,你不能将Swing与JOGL的GLCanvas混合使用(我可以使用GLJpanel,但这太慢而且无法使用)。但是,JOGL确实有一个功能(覆盖),它允许您绘制到一个Graphics实例,以便在GL上下文中绘制它。所以我可以调用jpanel.paint(g)将它绘制到屏幕上,使用叠加工作正常。剩下的唯一部分就是以某种方式使用GLCanvas上的鼠标和键盘监听器来接收和转发事件到JPanel。

我尝试使用findComponentAt(mousex,mousey)在特定位置的JPanel上获取组件,然后调用dispatchEvent到该组件,但组件不会对鼠标点击或任何事情做出反应。我假设EDT从MouseEvent / KeyEvent到ActionEvent进行某种转换,以使按钮和文本字段正常工作。如果最坏的情况发生,我可以测试组件是否是JButton并使用doClick,这至少会给我一些功能。但这不适用于非按钮组件,也不会执行任何按钮悬停等。我知道我应该只使用一个OpenGL GUI工具包(例如,FengGUI),但我依赖于Swing的HTML渲染功能,我宁愿不尝试重写该代码。

如何从GLCanvas中正确接收MouseEvents并将它们转发到JPanel,以便进行正确的处理? (即,按钮的动作监听器被激活,按钮在悬停时显示不同的图形等),

任何提示都将非常感谢

1 个答案:

答案 0 :(得分:2)

How to Use Root Panes: The Glass Pane中,GlassPaneDemo在方法redispatchMouseEvent()中显示了一种方法。