我在JTree
的两个面板中有两个JFrame
。我想改变节点的样式(颜色和字体)从一棵树拖放到另一棵树。请给我一种方法来永久地改变JTree
节点的颜色。
答案 0 :(得分:12)
首先,您需要一个可以处理样式和颜色的数据对象。您可以继承DefaultMutableTreeNode并使用getts和setter
添加这些数据项然后您需要创建自定义TreeCellRenderer。我建议扩展DefaultTreeCellRenderer,并在重写的处理程序中检查您的自定义类,并修改JLabel输出以使用Font和Color(如果设置了这些值)
答案 1 :(得分:7)
创建自己的CellRenderer
。要为MyTreeCellRenderer
提供适当的行为,您必须延长DefaultTreecellRenderer
并覆盖getTreeCellRendererComponent
方法。
public class MyTreeCellRenderer 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);
// Assuming you have a tree of Strings
String node = (String) ((DefaultMutableTreeNode) value).getUserObject();
// If the node is a leaf and ends with "xxx"
if (leaf && node.endsWith("xxx")) {
// Paint the node in blue
setForeground(new Color(13, 57 ,115));
}
return this;
}
}
最后,假设您的树名为myTree
,请将CellRenderer
设置为:
myTree.setCellRenderer(new MyTreeCellRenderer());