首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为JTree上的各个节点设置自定义图标?

如何为JTree上的各个节点设置自定义图标?
EN

Stack Overflow用户
提问于 2013-03-12 23:34:17
回答 1查看 3.2K关注 0票数 0

我需要能够为JTree各个节点设置图标。例如,我有一个JTree,我需要节点具有帮助表示它们的自定义图标。

  • (扳手图标)设置
  • (bug图标)调试
  • (笑脸图标)有趣的东西

..。

诸若此类。我尝试了几个来源,并得到了一些工作,但它破坏了树的活动,所以,没有雪茄。提前谢谢。

有人要求:

代码语言:javascript
复制
class Country {
    private String name;
    private String flagIcon;

    Country(String name, String flagIcon) {
        this.name = name;
        this.flagIcon = flagIcon;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getFlagIcon() {
        return flagIcon;
    }

    public void setFlagIcon(String flagIcon) {
        this.flagIcon = flagIcon;
    }
}

class CountryTreeCellRenderer implements TreeCellRenderer {
    private JLabel label;

    CountryTreeCellRenderer() {
        label = new JLabel();
    }

    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        Object o = ((DefaultMutableTreeNode) value).getUserObject();
        if (o instanceof Country) {
            Country country = (Country) o;
            label.setIcon(new ImageIcon(country.getFlagIcon()));
            label.setText(country.getName());
        } else {
            label.setIcon(null);
            label.setText("" + value);
        }
        return label;
    }
}

然后在初始化的地方:

代码语言:javascript
复制
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Countries");
    DefaultMutableTreeNode asia = new DefaultMutableTreeNode("General");
    Country[] countries = new Country[]{
            new Country("Properties", "src/biz/jabaar/lotus/sf/icons/page_white_edit.png"),
            new Country("Network", "src/biz/jabaar/lotus/sf/icons/drive_network.png"),
    };

    for (Country country : countries) {
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(country);
        asia.add(node);
    }

这是可行的,只是我不想让子根显示出来,只想显示节点。此外,这段代码使项目在单击时不会突出显示。

EN

回答 1

Stack Overflow用户

发布于 2013-03-13 03:45:28

我不想让子根显示出来,只想显示节点。

getTreeCellRendererComponent()的实现应该看到一个适当条件的boolean leaf参数,您可以使用这个参数,如图所示的here

代码语言:javascript
复制
if (o instanceof Country && leaf) { ... }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15374331

复制
相关文章

相似问题

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