[英]JTree: TreeCellRenderer not doing as expected
简而言之,我希望将树渲染为第一级为粗体。
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的字体设置为粗体,而其他级别呢。 其他条件在哪里? 你可以试试看吗?
@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.