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