Tree
Tree 组件将数据组织为节点的层次结构。每个节点保留一个唯一的键和一个标签。节点通过连接形成父子关系。您可以展开或折叠节点以显示或隐藏其子节点。图标清晰地说明了您正在查看的节点类型以及它是否被选中。选择支持同时选择一个节点或多个节点。
节点模型和树结构
TreeNode 的角色
树中的每个数据项都被包装在一个 TreeNode 中。这个对象保存键、文本标签,并链接到其父节点和子节点。根节点是特殊的:它在每棵树中存在,但不可见。它充当所有顶级节点的容器,使树结构在内部更易于管理。
由于节点保留对其父节点和子节点的引用,遍历树是直接的。无论您想向上、向下移动,还是通过键查找特定节点,连接始终可访问。
节点的创建和管理
使用简单的工厂方法创建节点,可以通过提供键和文本或者仅提供文本(文本也作为键)来完成。这确保每个节点都是有效的并且可唯一识别。
将节点添加到树中涉及调用父节点上的 add() 或 insert()。这些 方法处理分配父引用并通知树更新其 UI。
示例:
TreeNode parent = Tree.node("Parent");
TreeNode child = Tree.node("Child");
parent.add(child);
tree.add(parent);
尝试将同一节点分配给多个父节点将导致抛出异常。此保护措施确保树维持适当的层次结构,防止节点拥有多个父节点,这将破坏结构的完整性并导致意外行为。
显示代码
- TreeView.java
修改节点
您可以通过调用 setText(String text) 来更新节点的标签。此方法更改树中节点显示的文本。
要删除特定的子节点,请使用 remove(TreeNode child)。这将从其父节点中分离子节点,并将其从树结构中移除。它还会清除父引用。
如果您想清除节点的所有子节点,请调用 removeAll()。这将移除每个子节点,清除它们的父引用,并清空子节点列表。
每个节点支持使用 setUserData(Object key, Object data) 在服务器端存储附加信息。这让您可以在不向客户端或 UI 暴露此数据的情况下,将任意元数据或引用与节点关联。
在演示中,双击节点以打开其文本的编辑器。输入新文本并保存,以更新树中节点的标签。
显示代码
- TreeModifyView.java
- tree-modify-view.css
图标
图标提供关于节点表示及其状态的视觉提示。它们提高可读性,通过一眼区分节点类型和选择状态。Tree 组件支持全局设置默认图标、为每个节点自定义图标,并切换图标的可见性。