0

我想编写自定义 TreeCellRenderer 以具有不同颜色的根、节点和叶子。

这是我的代码:

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);

        }

    }
});

不幸的是,只有选定的节点会改变颜色。

我究竟做错了什么?TIA 寻求帮助。

//更新:我关联了我的代码,但没有帮助。

4

2 回答 2

5

也许您的意思是setBackgroundColor()and not setBackgroundSelectionColor(),顾名思义,它只设置所选状态的颜色。

你的使用super非常流畅[这个诙谐的评论归功于 Carl Smotricz ]

于 2009-11-17T19:07:56.787 回答
0

为什么在设置颜色(并最终返回它)之前调用 super.getTreeCellRendererComponent ?尝试先设置颜色并返回 super.getTreeCellRendererComponent 返回的内容

于 2009-11-17T19:08:50.430 回答