java - JTree:TreeCellRenderer 未按预期执行

标签 java swing fonts jtree treecellrenderer

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

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

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

最佳答案

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

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

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

关于java - JTree:TreeCellRenderer 未按预期执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30179955/

相关文章:

java - JFrame 周围的 LineBorder 消失

css - 如何减小字体文件大小?

java.lang.OutOfMemory错误: Java heap space

java - 将多个组件添加到 Jframe.getcontentpane()

java - Android Canvas 从白色过渡到红色

java - Swing GUI 不一致地卡住

html - 在 Keycloak 的自定义主题中引用字体

css - 网站使用的类 Metro 字体

java - 在 pom.xml 中打开 JDK 11 和 javah

java - vaadin 中图像上传期间出现 NoOutputStreamException