4

我正在处理的一个 Java 项目在 Java3d 和 Swing 工具提示之间存在奇怪的冲突。

我们的程序在中心设置了一个 Java3D Canvas3D,周围是 Swing JComponents(按钮、滑块、文本框等)。键盘和鼠标用于在 3d 世界中移动,按钮允许进行其他操作。

问题是,每当来自 Swing 组件的工具提示延伸到我们的窗口(JFrame)之外时,Java3D 中的移动就会减慢到爬行,并且会出现严重的卡顿问题。由于我们读到的关于挥杆中重量级/轻量级混合的所有问题,我们认为这可能是问题所在。

我们最初的解决方案是覆盖每个组件的 getToolTipLocation() 方法,以确保工具提示留在我们的窗口内。这似乎主要工作,但它在奇怪的位置留下了工具提示。此外,我们偶尔会在程序启动时以及在生成任何工具提示之前(每 20-30 次启动)遇到卡顿/减速问题。

然后昨天我发现了一种更奇怪的修复方法。只要工具提示的宽度为 151 像素或更大,它们就不会导致超出窗口的减速问题。任何宽度为 150 像素或更小的工具提示在离开窗口时都会导致我们的减速/卡顿问题。通过在我们使用的每种类型的组件中重写 createToolTip (),我们可以调用 setPreferedSize() 并确保所有工具提示都是 151 像素宽。当然,这种解决方法的问题是所有工具提示要么有很多空白,要么被截断。

有谁知道可能导致这种奇怪行为的原因以及我可以尝试解决的问题?

4

1 回答 1

0

为了解决重量级/轻量级混合问题,我总是选择以下有关 JPopupMenu 和 ToolTip 的设置:

import javax.swing.JPopupMenu;
import javax.swing.ToolTipManager;

ToolTipManager ttManager = ToolTipManager.sharedInstance();
ttManager.setEnabled(true);
ttManager.setLightWeightPopupEnabled(false);

JPopupMenu.setDefaultLightWeightPopupEnabled(false);

你也实现了这个吗?还是有帮助?

八月,InteractiveMesh

于 2011-06-10T08:26:27.407 回答