首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为JTree实现工具提示的最佳方式是什么?

为JTree实现工具提示的最佳方式是什么?
EN

Stack Overflow用户
提问于 2008-11-07 13:53:49
回答 3查看 11.9K关注 0票数 19

既然JTree和TreeModel不能直接提供开箱即用的工具提示,那么您认为为JTree提供特定于项目的工具提示的最佳方式是什么呢?

编辑:(稍后回答我自己的问题。)

@Zarkonnen:谢谢你的getTooltipText点子。

我发现了另一种覆盖DefaultTreeCellRenderer的方法(可能还是更好),并想分享一下:

代码语言:javascript
复制
public class JTreeWithToolTips {
    private static class OwnRenderer extends DefaultTreeCellRenderer {
        @Override
        public Component getTreeCellRendererComponent(JTree tree, Object value,
                boolean sel, boolean expanded, boolean leaf, int row,
                boolean hasFocus) {
            setToolTipText("foobar" + row);
            return super.getTreeCellRendererComponent(tree, value, sel,
                    expanded, leaf, row, hasFocus);
        }
    }

    public static void main(String[] args) {
        JTree tree = new JTree(new Object[] { "foo", "bar", "foobar" });
        tree.setCellRenderer(new OwnRenderer());
        ToolTipManager.sharedInstance().registerComponent(tree);

        JFrame frame = new JFrame();
        frame.getContentPane().add(tree);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-11-07 14:15:21

请参阅JTree上的getTooltipText。这应该允许您根据悬停在树上的内容来显示工具提示。(不过,一定要阅读文档,您需要向ToolTipManager注册JTree。)

票数 15
EN

Stack Overflow用户

发布于 2009-11-21 13:33:06

是的,你可以使用onMouseMoved,然后使用一个方法(我不记得名字了)来告诉你你所在的节点。如果你得到null,很明显你不是在一个节点上。

票数 1
EN

Stack Overflow用户

发布于 2017-09-07 05:43:34

在处理特定的TreeNode子类时,根据您自己的回答和评论,我为我的TreeNode提出了一个接口来实现。

注意我们如何检查value是否是TreeCellRenderer中的Tooltipable

代码语言:javascript
复制
public static interface Tooltipable {
    public String getToolTip();
}

public static class TheNode extends DefaultMutableTreeNode implements Tooltipable {

    private String shortDesc, longDesc;

    public TheNode(String shortDesc, String longDesc) {
        super();
        this.shortDesc = shortDesc;
        this.longDesc = longDesc;
    }

    @Override
    public String getToolTip() {
        return longDesc;
    }

    @Override
    public String toString() {
        return shortDesc;
    }
}

public static class TheModel extends DefaultTreeModel {
    public TheModel() {
        super(new TheNode("Root", "The base of everything"));
        TheNode root = (TheNode)getRoot();
        root.add(new TheNode("Second", "I am a number two"));
        TheNode node = new TheNode("Third", "Another one bites the dust");
        root.add(node);
        node.add(new TheNode("Last", null)); // No tooltip for this one
    }
}

public static class TreeTooltipRenderer extends DefaultTreeCellRenderer {
    @Override
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        if (value instanceof Tooltipable)
            setToolTipText(((Tooltipable)value).getToolTip());
        return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
    }
}

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setBounds(100, 100, 300, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JTree tree = new JTree(new TheModel());
    ToolTipManager.sharedInstance().registerComponent(tree);
    tree.setCellRenderer(new TreeTooltipRenderer());
    frame.add(new JScrollPane(tree), BorderLayout.CENTER);
    frame.setVisible(true);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/272124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档