Изменить значки узлов JTree в соответствии с уровнем глубины - PullRequest
8 голосов
/ 09 января 2011

Я ищу для изменения различных иконок моего JTree (Swing)

В документации по Java объясняется, как менять значки, если узел является листом или нет, но это действительно не то, что я ищу.

Для меня не имеет значения, является ли узел листом, или я просто хочу поменять значки, если узел находится на первом / втором / третьем уровне глубины трех.

Ответы [ 2 ]

8 голосов
/ 09 января 2011

В качестве альтернативы пользовательскому TreeCellRenderer, вы можете заменить значения по умолчанию для collapsedIcon и 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 - это просто реализация интерфейса Icon:

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;
    }
}
5 голосов
/ 09 января 2011

Реализация пользовательского TreeCellRenderer - используйте JLabel для компонента и установите его значок так, как вам нравится, используя данные объекта, хранящиеся в дереве. Вам может понадобиться обернуть объект, чтобы сохранить его глубину и т. Д., Если объект примитивен (например, String)

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

...