【问题标题】:Continuous Tooltip Update in SwingSwing 中的持续工具提示更新
【发布时间】:2009-10-07 15:05:33
【问题描述】:

我有一个自定义的摆动组件,它的实现类似于 JTree。它有一个使用 CellRenderer 呈现对象列表的 ComponentUI。工具提示现在正确显示每个渲染的单元格,但是它不会像我想要的那样跟踪鼠标。例如,如果我有这样布置的盒子;

[ 框 A ] [ 框 B ] [ 框 C ] [ 框 D ]

如果我将鼠标拖过这些框,我将看到 box A 的工具提示,鼠标越过 box A 边界。当我继续移动鼠标时,工具提示不会跟踪指针。当我离开该框时,工具提示将适当地消失。当我越过 box B 时,也会发生同样的事情。

我的猜测是,当getToolTipText(MouseEvent event) 的内容发生变化时,工具提示只会更新视图。我想要的行为是让工具提示跟踪指针位置,而不管getToolTipText 返回的内容如何。一个快速的技巧是根据对该方法的偶数/奇数调用来添加和删除空白空间。这行得通,但是,这不是我应该这样做的方式。

我正在寻找一种优雅的非 hack 方式来解决这个问题。我希望有人知道某处有一些神秘的标志,它会强制工具提示跟随鼠标而不管鼠标内容如何。

【问题讨论】:

    标签: java swing tooltip


    【解决方案1】:

    在您的单元格渲染器中覆盖 getToolTipLocation

    【讨论】:

    • 啊,甜甜的!!!谢谢。我知道必须有一个简单的方法,它一直就在我面前。
    • 我实际上把它变成了组件的一部分,而不是单元格渲染器。与单元格相比,那里的行为似乎更合适。
    【解决方案2】:

    当指向 JList 的元素时,我尝试使用 getToolTipLocation 设置工具提示的位置,但它不起作用。

    插入断点后,在这样的代码中:

    public class DefinitionListCellRenderer extends JTextArea implements
            ListCellRenderer, ComponentListener {
    
    ...
    
        @Override
        public Point getToolTipLocation(MouseEvent event) {
            Point pt = new Point(event.getX(), event.getY());
            return pt;
        }
    
    
    ...
    
    }
    

    getToolTipLocation 甚至没有被调用!!你能说一下,为什么? DefinitionListCellRenderer 是列表中的单个项目(具有 getListCellRendererComponent() )。

    【讨论】:

    • 检查以确保组件已向工具提示提供程序注册:ToolTipManager.sharedInstance().registerComponent(component);
    猜你喜欢
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多