Что не так с этим цветным JTree? (проблема пользовательского рендерера) - PullRequest
0 голосов
/ 17 ноября 2009

Я хочу написать собственный TreeCellRenderer, чтобы Root, узлы и листья были другого цвета.

Это мой код:

tree.setCellRenderer(new DefaultTreeCellRenderer() {

    @Override
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        {

            DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;

            if (node.isRoot()) {
                super.setBackground(Color.red);
            } else if (node.getChildCount() > 0) {
                super.setBackground(Color.yellow);
            } else if (leaf) {
                super.setBackground(Color.green);
            }
            return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);

        }

    }
});

К сожалению, только выбранный узел меняет цвет.

Что я делаю не так? ТИА за помощь.

// обновление: Я сопоставил свой код, но это не помогло.

Ответы [ 2 ]

5 голосов
/ 17 ноября 2009

Возможно, вы имеете в виду setBackgroundColor(), а не setBackgroundSelectionColor(), который, как следует из названия, устанавливает цвет только для выбранного состояния.

Вы используете super super fluous [кредит за это остроумное замечание идет Carl Smotricz ].

0 голосов
/ 17 ноября 2009

Почему вы вызываете super.getTreeCellRendererComponent до того, как вы установите цвета (и в итоге вернете это)? Попробуйте сначала установить цвета и вернуть то, что super.getTreeCellRendererComponent возвращает

...