想象一下,我有一个显示多个字符串的JTree - 例如颜色列表。如何用不同的颜色/字体组合渲染这样的树?如何正确实现TreeCellRenderer?
感谢您的帮助。
答案 0 :(得分:2)
您可以扩展DefaultTreeCellRenderer。在getTreeCellRendererComponent方法中,您调用super()并检查条件,例如通过分析价值。之后调用setFont(),setBackground()和setForeground()方法。
答案 1 :(得分:1)
另一种可能的方法是创建一个实现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。