Java 模拟事件分派线程

Java 模拟事件分派线程,java,swing,jogl,Java,Swing,Jogl,在我的应用程序中,我希望将鼠标和键盘事件转发到一个不可见的JPanel,我希望JPanel能够像处理EDT一样处理它们。这是因为应用程序有一个可选扩展,可以在某些渲染中使用JOGL。我已经在Swing中编写了GUI,所以我想重用这些代码。不幸的是,您不能将Swing与JOGL的GLCanvas混合使用(我可以使用GLJpanel,但速度太慢,无法使用)。不过,JOGL有一个功能(覆盖),允许您绘制到图形实例,以便在GL上下文中绘制。因此,我可以调用jpanel.paint(g)使用效果良好的覆盖

在我的应用程序中,我希望将鼠标和键盘事件转发到一个不可见的JPanel,我希望JPanel能够像处理EDT一样处理它们。这是因为应用程序有一个可选扩展,可以在某些渲染中使用JOGL。我已经在Swing中编写了GUI,所以我想重用这些代码。不幸的是,您不能将Swing与JOGL的GLCanvas混合使用(我可以使用GLJpanel,但速度太慢,无法使用)。不过,JOGL有一个功能(覆盖),允许您绘制到图形实例,以便在GL上下文中绘制。因此,我可以调用jpanel.paint(g)使用效果良好的覆盖层将其绘制到屏幕上。剩下的唯一一个难题是如何使用GLCanvas上的鼠标和键盘侦听器接收事件并将其转发给JPanel

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

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


任何提示都将非常受欢迎

在中,显示了方法中的一种方法
RedispatchMouseeEvent()

“任何提示都将非常受欢迎”1)深呼吸。2) 问一个问题。太好了,成功了!显然,对pointConvert的调用非常重要(我没有尝试过这些)。唯一不起作用的是JTextField——我不知道如何将KeyEvents转发到当前关注的组件。KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();似乎返回了无效的GLCanvas。我可能只是跟踪最后一次单击的组件,但我想知道是否有真正的方法来完成它。@Steve:我的第一个想法是,但我没有在您的上下文中使用它们。