我想给一个JTree的特定节点添加颜色(并给出一个图标),而不是像OpenNode,LeafNode等组中的那样。我该如何去做这件事?Java树节点着色
0
A
回答
0
最简单的方法是使用DefaultMutableTreeNode
构建JTree
模型,并设置某个节点的“用户对象”值,然后使用此值确定呈现器在遇到时的行为该节点。
首先我们构建了一个简单的模型,并把它传递给JTree
构造:
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Hello");
DefaultMutableTreeNode child1 = new DefaultMutableTreeNode("Goodbye");
DefaultMutableTreeNode child2 = new DefaultMutableTreeNode("Bonjour");
root.add(child1);
root.add(child2);
JTree tree = new JTree(root);
现在定义自定义的树单元格渲染器:
TreeCellRenderer renderer = new DefaultTreeCellRenderer() {
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
// Defer to superclass to create initial version of JLabel and then modify (below).
JLabel ret = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
// We know that value is a DefaultMutableTreeNode so this downcast is safe.
MutableTreeNode node = (MutableTreeNode) value;
// Inspect user object and change rendering based on this.
if ("Hello".equals(node.getUserObject())) {
ret.setIcon(...);
}
// Could also inspect whether node is a leaf node, etc.
return ret;
}
};
2
This tutorial来自Sun展示了如何设置自己的节点图标以及如何区分树中的叶和非叶。
相关问题
- 1. 如何使用固定颜色对树节点着色?
- 2. 如何着色节点?
- 3. GraphML节点着色Prefuse
- 4. ArangoDB Webinterface - 着色节点
- 5. Java树节点选择
- 6. 着色器程序到节点+片段着色器
- 7. 功能节点 - 红色树莓
- 8. 更改树节点的字体颜色
- 9. 如何将树状图的节点着色为R中的单独行
- 10. D3树/节点
- 11. CheckBox节点树
- 12. GLSL:顶点着色器无片段着色片段着色器
- 13. Java中的决策树节点方法
- 14. Java - 在JPanel上绘制树节点
- 15. 通用树和通用节点Java
- 16. 搜索节点的树在Java中
- 17. Java树节点详细信息
- 18. Java自定义树节点交换
- 19. 来自枚举值的Java树节点
- 20. 使用Java 8 Streams汇总树节点
- 21. java树节点递归泛型
- 22. 树节点和树状
- 23. 着色关闭点
- 24. 每当树节点上点击一下树节点
- 25. 节点红色:CSV节点
- 26. 树加重节点
- 27. 树删除节点
- 28. 树节点名称
- 29. 扩大树节点
- 30. 显示节点树
感谢。这个功能就是我一直在寻找的。 – Goutham 2009-11-13 11:09:17
是否有可能在运行时动态地执行它? – Tobias 2010-10-13 08:56:34
是的。假设你更新了你的一个用户对象的状态,并且你希望这个改变导致相应的DefaultMutableTreeNode呈现不同,你需要在你的AbstractTreeModel实例上调用nodeChanged并传递节点来重新渲染。 – Adamski 2010-10-14 14:54:23