3

我正在尝试在 Java3D 画布上显示 Java Swing 组件并与之交互。我通过将透明 JPanel 绘制到缓冲图像来显示组件,然后使用 J3DGraphics2D 在画布上绘制该缓冲区。

我想不通的是如何将鼠标事件转发到 JPanel 中的摆动组件。我希望将 Canvas3D 上的所有键盘和鼠标事件发送到 JPanel,然后如果它们没有被任何摆动组件捕获(例如,鼠标不在其中任何一个组件上),则返回到 Canvas3D。

我尝试调用 Container.dispatchEvent(AWTEvent),但它没有成功地将事件分派到适当的组件,即使例如鼠标光标正好位于容器中的按钮上。

有谁知道这样做的方法?这应该是可能的。

4

1 回答 1

0

终于,我想通了!它已经完成了——使用 JCanvas3D 和 JLayeredPane。这是在 postRender() 中渲染 Swing 组件的相反方法——JCanvas3D 渲染到屏幕外缓冲区,然后使用 AWT 绘制到屏幕,创建一个轻量级画布,与 JLayeredPane 中的组件正确交互,即使它们是透明的.

需要注意的一件事——JCanvas3D 将所有输入重定向到屏幕外的 Canvas3D,但起初我的 Orbiter 并没有像使用重量级 Canvas3D 那样工作。您所要做的就是向 JCanvas3D 添加鼠标和键侦听器,因为如果没有为它们注册的侦听器,AWT 甚至不会传递这些事件。

于 2011-06-10T20:30:45.557 回答