Change JTree node icons according to the depth level

妖精的绣舞 提交于 2019-11-26 11:33:34

问题


I\'m looking for changing the different icons of my JTree (Swing)

The java documentation explains how to change icons if a node is a leaf or not, but that\'s really not what I\'m searching.

For me it doesn\'t matter if a node is a leaf or, I just want to change the icons if the node is in the first/2nd/3rd depth level of the three.


回答1:


As an alternative to a custom TreeCellRenderer, you can replace the UI defaults for collapsedIcon and expandedIcon:

Icon expanded = new TreeIcon(true, Color.red);
Icon collapsed = new TreeIcon(false, Color.blue);
UIManager.put("Tree.collapsedIcon", collapsed);
UIManager.put("Tree.expandedIcon", expanded);

TreeIcon is simply an implementation of the Icon interface:

class TreeIcon implements Icon {

    private static final int SIZE = 14;
    private boolean expanded;
    private Color color;

    public TreeIcon(boolean expanded, Color color) {
        this.expanded = expanded;
        this.color = color;
    }

    //@Override
    public void paintIcon(Component c, Graphics g, int x, int y) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setPaint(color);
        if (expanded) {
            g2d.fillOval(x + SIZE / 4, y, SIZE / 2, SIZE);
        } else {
            g2d.fillOval(x, y + SIZE / 4, SIZE, SIZE / 2);
        }
    }

    //@Override
    public int getIconWidth() {
        return SIZE;
    }

    //@Override
    public int getIconHeight() {
        return SIZE;
    }
}



回答2:


Implement a custom TreeCellRenderer - use a JLabel for the component, and set its icon however you like using the data of the Object stored in the tree. You may need to wrap the object to store its depth, etc. if the object is primitive (String for example)

http://download.oracle.com/javase/7/docs/api/javax/swing/tree/TreeCellRenderer.html http://www.java2s.com/Code/Java/Swing-JFC/TreeCellRenderer.htm



来源:https://stackoverflow.com/questions/4640818/change-jtree-node-icons-according-to-the-depth-level

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!