我正在处理的一个 Java 项目在 Java3d 和 Swing 工具提示之间存在奇怪的冲突。
我们的程序在中心设置了一个 Java3D Canvas3D,周围是 Swing JComponents(按钮、滑块、文本框等)。键盘和鼠标用于在 3d 世界中移动,按钮允许进行其他操作。
问题是,每当来自 Swing 组件的工具提示延伸到我们的窗口(JFrame)之外时,Java3D 中的移动就会减慢到爬行,并且会出现严重的卡顿问题。由于我们读到的关于挥杆中重量级/轻量级混合的所有问题,我们认为这可能是问题所在。
我们最初的解决方案是覆盖每个组件的 getToolTipLocation() 方法,以确保工具提示留在我们的窗口内。这似乎主要工作,但它在奇怪的位置留下了工具提示。此外,我们偶尔会在程序启动时以及在生成任何工具提示之前(每 20-30 次启动)遇到卡顿/减速问题。
然后昨天我发现了一种更奇怪的修复方法。只要工具提示的宽度为 151 像素或更大,它们就不会导致超出窗口的减速问题。任何宽度为 150 像素或更小的工具提示在离开窗口时都会导致我们的减速/卡顿问题。通过在我们使用的每种类型的组件中重写 createToolTip (),我们可以调用 setPreferedSize() 并确保所有工具提示都是 151 像素宽。当然,这种解决方法的问题是所有工具提示要么有很多空白,要么被截断。
有谁知道可能导致这种奇怪行为的原因以及我可以尝试解决的问题?