Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTree:TreeCellRenderer未按预期执行_Java_Swing_Fonts_Jtree_Treecellrenderer - Fatal编程技术网

Java JTree:TreeCellRenderer未按预期执行

Java JTree:TreeCellRenderer未按预期执行,java,swing,fonts,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.

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

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

渲染是一种共享资源,您对它所做的任何更改都会被带到下一个要渲染的元素上,因此您必须始终确保在某个点将其设置为“默认”状态,如果级别不是
1
,则重置渲染的字体状态

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

渲染是一种共享资源,您对它所做的任何更改都会被带到下一个要渲染的元素上,因此您必须始终确保在某个点将其设置为“默认”状态。在代码中,您将字体粗体设置为级别1,但其他级别如何。其他条件在哪里?你能试试这个吗

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

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

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

效验如神对不起,这是个愚蠢的问题。不知道需要使用setfontreset@GreenMellon如果你不知道的话,任何人都可以偷偷接近你;)效验如神对不起,这是个愚蠢的问题。不知道需要使用setfontreset@GreenMellon如果你不知道的话,任何人都可以偷偷接近你;)