【问题标题】:Java3D stuttering issue with Swing tooltipsSwing 工具提示的 Java3D 口吃问题
【发布时间】: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


    【解决方案1】:

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

    import javax.swing.JPopupMenu;
    import javax.swing.ToolTipManager;
    
    ToolTipManager ttManager = ToolTipManager.sharedInstance();
    ttManager.setEnabled(true);
    ttManager.setLightWeightPopupEnabled(false);
    
    JPopupMenu.setDefaultLightWeightPopupEnabled(false);
    

    您是否也实现了这一点?还是有帮助?

    8 月,交互式网格

    【讨论】:

    • 是的,我们已尝试启用和禁用轻量级弹出窗口,但没有明显变化。
    猜你喜欢
    • 1970-01-01
    • 2023-01-26
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多