我正在研究的Java项目在Java3d和Swing工具提示之间有一个奇怪的冲突。
我们的程序在中间由Swing JComponent(按钮,滑块,文本框等)包围的Java3D Canvas3D中进行设置。键盘和鼠标用于在3d世界中移动,而按钮则允许其他操作。
问题在于,只要来自Swing组件的工具提示延伸到我们的窗口(JFrame)之外,Java3D中的移动就会缓慢进行爬网,并且会出现严重的卡顿问题。由于我们已经阅读了有关挥杆中重量级/重量级混合的所有问题,因此我们认为这很可能是问题所在。
我们最初的解决方案是重写每个组件的getToolTipLocation()方法,以确保工具提示停留在我们的窗口内。这似乎最有效,但是却使工具提示停留在奇怪的位置。此外,我们有时会在程序启动后以及生成任何工具提示之前(每20-30次启动)出现口吃/速度慢的问题。
昨天,我发现了一种修复它的古怪方式。只要工具提示的宽度为151像素或更大,它们就不会导致减速问题超出窗口范围。任何宽度小于或等于150像素的工具提示都会在离开窗口后立即导致减慢/卡顿问题。通过在我们使用的每种类型的组件中覆盖createToolTip(),我们可以调用setPreferedSize()并确保所有工具提示的宽度均为151像素。当然,这种解决方法的问题在于,所有工具提示都有很多空白或被截断。
有谁知道导致这种奇怪行为的原因以及我可以尝试解决的方法?
最佳答案
为了解决重量级/轻型混合问题,我始终选择与JPopupMenu和ToolTip有关的以下设置:
import javax.swing.JPopupMenu;
import javax.swing.ToolTipManager;
ToolTipManager ttManager = ToolTipManager.sharedInstance();
ttManager.setEnabled(true);
ttManager.setLightWeightPopupEnabled(false);
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
您是否也执行了此操作?还是有帮助?
八月,InteractiveMesh