繁体   English   中英

Swing 工具提示的 Java3D 口吃问题

[英]Java3D stuttering issue with Swing tooltips

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

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

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

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

然后昨天我发现了一种更奇怪的修复方法。 只要工具提示的宽度为 151 像素或更大,它们就不会导致超出 window 的减速问题。 任何宽度为 150 像素或更小的工具提示会在离开 window 后立即导致我们的减速/卡顿问题。 通过在我们使用的每种类型的组件中重写 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM