【发布时间】:2012-04-24 02:33:58
【问题描述】:
我在JFrame 的两个面板中有两个JTree。我想更改从一棵树拖放到另一棵树时节点的样式(颜色和字体)。请为我提供一种永久更改JTree 节点颜色的方法。
【问题讨论】:
标签: java swing drag-and-drop jtree renderer
我在JFrame 的两个面板中有两个JTree。我想更改从一棵树拖放到另一棵树时节点的样式(颜色和字体)。请为我提供一种永久更改JTree 节点颜色的方法。
【问题讨论】:
标签: java swing drag-and-drop jtree renderer
首先,您需要有一个可以处理样式和颜色的数据对象。您可以继承 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());
【讨论】:
MyTreeCellRenderer,在setForeground(new Color(13, 57 ,115));行下,我写setBackground(Color.YELLOW);,树的背景不会变成黄色..