gpt4 book ai didi

swing - 重定向 Swing 鼠标事件

转载 作者:行者123 更新时间:2023-12-02 05:10:15 29 4
gpt4 key购买 nike

我正在努力使在 Java3D Canvas 上显示 Java Swing 组件并与之交互成为可能。我通过将透明 JPanel 绘制到缓冲图像来显示组件,然后使用 J3DGraphics2D 在 Canvas 上绘制该缓冲区。

我想不通的是如何将鼠标事件转发到 JPanel 中的 swing 组件。我希望 Canvas3D 上的所有键盘和鼠标事件都被分派(dispatch)到 JPanel,如果它们没有被任何 swing 组件捕获(例如,鼠标不在任何组件上),然后回退到 Canvas3D。

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

有没有人知道如何做到这一点?应该是可以的。

最佳答案

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

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

关于swing - 重定向 Swing 鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6286489/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com