1

简而言之,我希望将树渲染为使第一级为粗体。

public class TreeRenderer1 extends DefaultTreeCellRenderer {

@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
        boolean sel, boolean exp, boolean leaf, int row, boolean hasFocus) {
    super.getTreeCellRendererComponent(tree, value, sel, exp, leaf, row, hasFocus);

    DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;

    if (node.getLevel()==1) {
        setFont(getFont().deriveFont(Font.BOLD));
    }

    return this;
}
}

但是,这会使我的树中的所有节点变为粗体。怎么了?

4

2 回答 2

4

如果级别不是,则重置渲染的字体状态1...

if (node.getLevel()==1) {
    setFont(getFont().deriveFont(Font.BOLD));
} else {
    setFont(getFont().deriveFont(Font.PLAIN));
}

渲染器是共享资源,您对其所做的任何更改都会被带到下一个要渲染的元素上,因此您必须始终确保在某个时候将其设置为“默认”状态

于 2015-05-12T00:54:42.897 回答
2

在您的代码中,您为级别 1 设置了粗体字,但其他级别呢?else 条件在哪里?你能试试这个吗?

@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
        boolean sel, boolean exp, boolean leaf, int row, boolean hasFocus) {
    super.getTreeCellRendererComponent(tree, value, sel, exp, leaf, row, hasFocus);

    DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;

    if (node.getLevel()==1) {
        setFont(getFont().deriveFont(Font.BOLD));
    } else {
        setFont(getFont().deriveFont(Font.PLAIN));
    }

    return this;
}
}
于 2015-05-12T00:55:39.267 回答