假设我有一个JTree,它显示多个字符串--例如一个颜色列表。如何用不同的颜色/字体组合来渲染这样的树呢?如何正确实现TreeCellRenderer?
谢谢你的帮助。
发布于 2011-02-09 17:40:18
您可以扩展DefaultTreeCellRenderer。在getTreeCellRendererComponent方法中,您可以调用super()并检查您的条件,例如通过分析值。之后,分别调用setFont()、setBackground()和setForeground()方法。
发布于 2011-02-09 17:59:12
另一种可能的方法是创建一个实现TreeCellRenderer的内部类。然后,您所要做的就是以您想要的方式定制JLabel。
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
boolean expanded, boolean leaf, int row, boolean hasFocus) {
Component returnValue = null;
if ((value != null) && (value instanceof DefaultMutableTreeNode)) {
Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
if (userObject instanceof Employee) {
Employee e = (Employee) userObject;
firstNameLabel.setText(e.firstName);
lastNameLabel.setText(e.lastName);
salaryLabel.setText("" + e.salary);
if (selected) {
renderer.setBackground(backgroundSelectionColor);
} else {
renderer.setBackground(backgroundNonSelectionColor);
}
renderer.setEnabled(tree.isEnabled());
returnValue = renderer;
}
}
if (returnValue == null) {
returnValue = defaultRenderer.getTreeCellRendererComponent(tree, value, selected, expanded,
leaf, row, hasFocus);
}
return returnValue;
}摘自this site。
https://stackoverflow.com/questions/4943083
复制相似问题