MujicaUI

Data · #073

TreeTable 浅色主题渲染快照
浅色 · 渲染快照
TreeTable 深色主题渲染快照
深色 · 渲染快照

073 TreeTable · 树形表格

用途

把树形层级与表格列结合:首列显示展开箭头与缩进,其余列显示属性。支持展开、选择、列宽与列顺序、排序状态(同级节点在本地排序,结果按父节点缓存,只在子项或排序变化时重新计算),以及外部加载子项。只构建可见行。

最小示例

kids := map[string][]string{"Vestry": {"Stole", "Alb"}}
size := map[string]int{"Vestry": 9, "Stole": 2, "Alb": 5, "Organ": 7}
var state data.TreeTableState[string]
view := func(c *ui.Context) {
	core.Use(c, core.Settings{})
	data.TreeTable(c, &state, data.TreeTableOptions[string]{
		Roots:    []string{"Vestry", "Organ"},
		Children: func(n string) []string { return kids[n] },
		Label:    func(n string) string { return n },
		Columns: []data.TreeColumn[string]{
			{ID: "name", Title: "Name", Cell: func(n string) { ui.Text(c, n) },
				Compare: cmp.Compare[string]},
			{ID: "size", Title: "Size", Width: 80, Align: ui.End,
				Cell: func(n string) { ui.Text(c, strconv.Itoa(size[n])) }},
		},
	}).Element.Size(360, 240)
}
ui.Render(view, 400, 300, 1)

参数

func TreeTable[K comparable](c *ui.Context, s *TreeTableState[K], opts TreeTableOptions[K]) DataTableView。TreeTableState 字段:Sort、Layout、Selection;方法:Selected()、SetOpen、IsOpen。表格上方的“列”按钮弹层提供每列的排序、左移/右移与列宽调整,是这些操作的键盘入口。

字段类型默认值含义
Columns[]TreeColumn[K]必填列:ID(必填、唯一)、Title、Width、MinWidth、Align、Compare(设置后可点击排序同级节点)、Cell(必填)。首列在箭头后显示 Cell。
Roots[]K空顶层节点。
Childrenfunc(K) []K必填子节点:nil 为叶子,空切片为未加载。子项变化时请返回新切片(排序缓存按切片识别)。
Labelfunc(K) string必填无障碍名称与输入定位。
ItemStatus, Loadnil与 Tree 相同的外部加载协议。
Multipleboolfalse多选。
StatusDataStatusDataReady加载状态:DataLoading 首次加载(无行时显示加载标记)、DataLoadingMore 追加加载(行下方显示“正在加载更多”)、DataFailed 失败(显示错误与“重试”)。
Errorstring内置“加载失败”DataFailed 时显示的具体错误。
Emptystring内置“暂无数据”无数据时的说明文字。

状态

默认、悬停、选中(Selection 背景 + AccentText 勾选标记)、聚焦、展开/折叠、排序箭头、子项加载中/失败、空。

事件

返回 DataTableView:Changed()、Submitted()、SortChanged()、Retried()。

键盘操作

  • 与 Tree 相同的方向键与展开键;点击表头排序同级节点,再次点击反向;拖动表头边缘或表头调整列宽与顺序。
  • 列菜单:Tab 到“列”按钮,Enter 打开,Tab 到排序、移动与列宽按钮,Enter 执行,Escape 关闭。

限制

  • 基于 MyGo ui.OutlineTable;表头只能显示文字。
  • 排序只作用于同级节点,层级关系保持不变。