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如果你不知道的话,任何人都可以偷偷接近你;)