Skip to content

TreeList

自 2.2.1

TreeList<NODE> 是一个通用层级列表 Widget。每个节点实现 ITreeNode,可以是分支(可展开)或叶子节点。节点使用可配置的 UIElementProvider 渲染,并可通过箭头图标、单击或双击来展开/折叠。

特性:

  • 单选和多选(配合 ShiftCtrl)。
  • 动态树(默认每 tick 重新检查子节点)或静态树。
  • Flatten-root 模式,在显示中跳过根节点。
  • 可自定义展开/折叠图标和节点背景纹理。

INFO

UIElement 中记录的所有内容(布局、样式、事件、数据绑定等)同样适用于此处。


用法

java
var tree = new TreeList<MyNode>(rootNode);
tree.setNodeUISupplier(TreeList.textTemplate(node -> Component.literal(node.getName())));
tree.setOnSelectedChanged(selected -> System.out.println("Selected: " + selected));
tree.setDoubleClickToExpand(true);
parent.addChild(tree);

Tree List 样式

INFO

node-background

未选中节点的背景纹理。

默认值:无(空)

java
tree.menuStyle(style -> style.nodeTexture(myBg));

INFO

node-hover-background

选中(高亮)节点的背景纹理。

默认值:ColorPattern.BLUE.rectTexture()

java
tree.menuStyle(style -> style.hoverTexture(myHighlight));

INFO

collapse-icon / expand-icon

分支节点在折叠或展开时显示的图标。

默认值:Icons.RIGHT_ARROW_NO_BAR_S_WHITE / Icons.DOWN_ARROW_NO_BAR_S_WHITE

java
tree.menuStyle(style -> style
    .collapseIcon(myCollapsed)
    .expandIcon(myExpanded)
);

字段

名称类型访问权限描述
treeListStyleTreeListStyleprivate (getter)当前样式。
rootNODE (nullable)private (getter)根树节点。
hoveredNodeNODE (nullable)private (getter)当前鼠标悬停的节点。
doubleClickToExpandbooleansetter双击是否展开/折叠分支。默认值:true
clickToExpandbooleansetter单击是否展开/折叠分支。默认值:false
supportMultipleSelectionbooleansetterCtrl+点击Shift+点击 是否可选中多个节点。默认值:false
staticTreebooleansettertrue 时,不会每 tick 重新检查子节点。默认值:false

方法

方法返回描述
setRoot(NODE)TreeList&lt;NODE&gt;设置根节点并重建列表。
setNodeUISupplier(UIElementProvider&lt;NODE&gt;)TreeList&lt;NODE&gt;设置创建每个节点 UI 的工厂。
setOnNodeUICreated(BiConsumer&lt;NODE, UIElement&gt;)TreeList&lt;NODE&gt;每个节点 UI 创建后调用的回调。
setOnSelectedChanged(Consumer&lt;Set&lt;NODE&gt;&gt;)选中项变化时调用的回调。
setOnDoubleClickNode(Consumer&lt;NODE&gt;)双击时调用的回调。
setSelectableNodeFilter(Predicate&lt;NODE&gt;)控制哪些节点可以被选中的谓词。
setFlattenRoot(boolean)TreeList&lt;NODE&gt;true 时,根节点不显示;其子节点变为顶级项。
getSelected()Set&lt;NODE&gt;返回当前选中的节点(不可修改)。
setSelected(Collection&lt;NODE&gt;, boolean)TreeList&lt;NODE&gt;替换选中项。
addSelected(NODE, boolean)TreeList&lt;NODE&gt;将节点添加到选中项。
removeSelected(NODE, boolean)TreeList&lt;NODE&gt;从选中项中移除节点。
expandNode(NODE)void展开分支节点。
collapseNode(NODE)void折叠分支节点。
expandNodeAlongPath(NODE)void展开给定节点的所有祖先。
isNodeExpanded(NODE)boolean节点当前是否展开。
isNodeSelected(NODE)boolean节点当前是否被选中。
reloadList()TreeList&lt;NODE&gt;清除并从当前根节点重建所有节点 UI。
menuStyle(Consumer&lt;TreeListStyle&gt;)TreeList&lt;NODE&gt;以流式方式配置样式。

节点 UI 模板

常用节点 UI 布局的静态辅助方法:

方法描述
textTemplate(Function&lt;NODE, Component&gt;)创建一个仅显示文本的节点 UI。
iconTextTemplate(Function&lt;NODE, IGuiTexture&gt;, Function&lt;NODE, Component&gt;)创建一个带有图标和文本的节点 UI。
optionalIconTextTemplate(Function&lt;NODE, IGuiTexture&gt;, Function&lt;NODE, Component&gt;)类似 iconTextTemplate,但仅在图标非空时显示。

Released under the MIT License.