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

Java 如何为JTree上的单个节点设置自定义图标?,java,swing,jframe,jtree,Java,Swing,Jframe,Jtree,我需要能够为JTree单个节点设置图标。例如,我有一个JTree,我需要节点具有自定义图标,以帮助表示它们是什么 (扳手图标)设置 (错误图标)调试 (笑脸图标)有趣的东西 等等。我尝试了几个来源,找到了一个可以工作的,但是它把树事件搞砸了,所以没有雪茄。提前谢谢 应某人的要求: class Country { private String name; private String flagIcon; Country(String name, String fla

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

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

等等。我尝试了几个来源,找到了一个可以工作的,但是它把树事件搞砸了,所以没有雪茄。提前谢谢

应某人的要求:

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;
    }
}
然后在初始化的位置:

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);
    }
这是可行的,只是我不希望子根显示出来,只是节点。此外,此代码使其在单击项目时不会高亮显示

我不想显示子根,只想显示节点

gettreeCellrenderComponent()
的实现应该看到一个经过适当条件的
布尔叶
参数,您可以使用该参数,如图所示


还有一个很有效…很好,请发布并描述你遇到的问题。这不是我需要的,但它已经发布了。你说的次根是什么意思?为了更快地获得更好的帮助,请发布一个(你最近的尝试)。我们可以更努力地做,尝试查看和
if (o instanceof Country && leaf) { ... }