我有两个JTree在两个面板中JFrame。我想在从一棵树拖放到另一棵树时更改节点的样式(颜色和字体)。请为我提供一种JTree永久更改节点颜色的方法。

我有两个JTree在两个面板中JFrame。我想在从一棵树拖放到另一棵树时更改节点的样式(颜色和字体)。请为我提供一种JTree永久更改节点颜色的方法。

首先,您需要有一个可以处理样式和颜色的数据对象。您可以继承 DefaultMutableTreeNode 并使用 getts 和 setter 添加这些数据项
然后你需要创建一个自定义 TreeCellRenderer。我建议扩展 DefaultTreeCellRenderer,并在重写的处理程序中检查您的自定义类,并修改 JLabel 输出以使用字体和颜色(如果设置了这些值)
创建您自己的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());