Vaadin Flow v25:TreeGrid如何选中中间节点且不展开子节点?
解决Vaadin 25 TreeGrid中间节点无法选中的问题
问题分析
默认情况下,TreeGrid的层级列点击节点区域会触发展开/折叠操作,且仅叶子节点可被选中。要实现点击中间节点直接选中,仅点击展开图标控制折叠/展开,需要调整两个核心设置:开启节点选择模式,限制展开触发范围到仅图标区域。
修改后的代码示例
package myapp; import java.util.ArrayList; import java.util.List; import com.vaadin.flow.component.html.Div; import com.vaadin.flow.component.treegrid.TreeGrid; import com.vaadin.flow.component.treegrid.TreeGrid.SelectionMode; import com.vaadin.flow.router.Route; @Route("/tree") public final class TestTreeGrid extends Div { public class Node { Node(String n) { name = n; } String name; public String getName() { return name; } List<Node> children = new ArrayList<>(); public List<Node> getChildren() { return children; } } Node getRoot() { Node root = new Node("root"); Node c1 = new Node("1"); Node c2 = new Node("2"); root.children.add(c1); root.children.add(c2); c1.children.add(new Node("1.1")); c1.children.add(new Node("1.2")); c2.children.add(new Node("2.1")); return root; } TestTreeGrid() { TreeGrid<Node> treeGrid = new TreeGrid<>(); // 1. 开启选择模式(单选/多选根据需求调整) treeGrid.setSelectionMode(SelectionMode.SINGLE); treeGrid.setItems(getRoot().children, Node::getChildren); // 2. 添加层级列并设置仅点击图标时展开/折叠 var hierarchyColumn = treeGrid.addHierarchyColumn(Node::getName); hierarchyColumn.setExpandOnClick(false); // 可选:监听选中事件,验证功能 treeGrid.addSelectionListener(event -> { event.getFirstSelectedItem().ifPresent(node -> { System.out.println("选中节点: " + node.getName()); }); }); add(treeGrid); } }
关键改动说明
- 开启选择模式:通过
setSelectionMode启用单选或多选,这是节点能被选中的前提。 - 限制展开触发范围:调用层级列的
setExpandOnClick(false),将展开/折叠操作的触发范围限制到左侧的展开图标上,点击节点名称区域会触发选中而非展开。 - 这样设置后,中间节点(如"1"、"2")点击名称区域会被选中,点击左侧图标才会展开/折叠子节点,叶子节点的选中行为保持正常。
内容的提问来源于stack exchange,提问作者abcdefg
相关产品推荐
相关产品推荐

