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