我有两个JTree
在两个面板中JFrame
。我想在从一棵树拖放到另一棵树时更改节点的样式(颜色和字体)。请为我提供一种JTree
永久更改节点颜色的方法。
问问题
13304 次
2 回答
12
首先,您需要有一个可以处理样式和颜色的数据对象。您可以继承 DefaultMutableTreeNode 并使用 getts 和 setter 添加这些数据项
然后你需要创建一个自定义 TreeCellRenderer。我建议扩展 DefaultTreeCellRenderer,并在重写的处理程序中检查您的自定义类,并修改 JLabel 输出以使用字体和颜色(如果设置了这些值)
于 2012-04-11T18:37:44.727 回答
9
创建您自己的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());
于 2014-12-17T10:17:28.197 回答