简体   繁体   English

JTree:TreeCellRenderer没有按预期做

[英]JTree: TreeCellRenderer not doing as expected

In a nutshell, I want the tree be rendered such that the first level is bold. 简而言之,我希望将树渲染为第一级为粗体。

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

This, however, make all the nodes in my tree bold. 但是,这会使树中的所有节点变为粗体。 What is wrong? 怎么了?

Reset the font state of the render if the level is NOT 1 ... 如果级别不为1则重置渲染的字体状态。

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

Render's are a shared resource, any changes you make to it are carried onto the next element to be rendered, so you must always make sure you set it to a "default" state at some point 渲染是共享资源,您对它所做的任何更改都会被带到下一个要渲染的元素上,因此您必须始终确保将其设置为“默认”状态

In your code you set font bold for level 1 but what about the other levels. 在您的代码中,将级别1的字体设置为粗体,而其他级别呢。 Where is the else condition? 其他条件在哪里? Can you please try this? 你可以试试看吗?

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM