Set icon to each node in Jtree

后端 未结 2 1219
既然无缘
既然无缘 2020-12-10 04:34

I want to set for each node in my JTree a different icon, actually I\'m loading each node from a data base, with a \"while\", I set each icon like a root, leaf or parent. Li

相关标签:
2条回答
  • 2020-12-10 05:04

    You can use it, a shorter way. "tree" is my JTree component.

    DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tree.getCellRenderer();
    Icon closedIcon = new ImageIcon("closed.png");
    Icon openIcon = new ImageIcon("open.png");
    Icon leafIcon = new ImageIcon("leaf.png");
    renderer.setClosedIcon(closedIcon);
    renderer.setOpenIcon(openIcon);
    renderer.setLeafIcon(leafIcon);    
    
    0 讨论(0)
  • 2020-12-10 05:07

    You can change default UI values for icons of JTree nodes without any custom renderer:

    URL resource = logaff.class.getResource(IMAGE);
    Icon icon = new ImageIcon(resource);
    
    UIManager.put("Tree.closedIcon", icon);
    UIManager.put("Tree.openIcon", icon);
    UIManager.put("Tree.leafIcon", icon);
    

    or use something like next:

    @Override
    public Component getTreeCellRendererComponent(JTree tree,
        Object value, boolean selected, boolean expanded,
        boolean leaf, int row, boolean hasFocus) {
            super.getTreeCellRendererComponent(tree, value, selected,expanded, leaf, row, hasFocus);
            DefaultMutableTreeNode nodo = (DefaultMutableTreeNode) value;
            if (tree.getModel().getRoot().equals(nodo)) {
                setIcon(root);
            } else if (nodo.getChildCount() > 0) {
                setIcon(parent);
            } else {
                setIcon(leaf);
            }
            return this;
    }
    

    Also read about rendering mechanism.

    0 讨论(0)
提交回复
热议问题