[英]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.