在树形网格中选择中间节点

前端开发 2026-07-10

使用 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.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<TestTreeGrid.Node>();
        treeGrid.setItems(getRoot().children, Node::getChildren);
        treeGrid.addHierarchyColumn(Node::getName);
        add(treeGrid);
    }
}

显示如下:

enter image description here

如果我点击 1,得到如下结果(也就是展开但不选中)

enter image description here

如果我点击 1.1,得到如下

enter image description here

然而,我希望能够在不展开其子节点的情况下选中一个中间节点。在 flow(v25)版本中,能实现这个吗?


更新

我找到了 这个链接,确实可以仅在图标上展开/折叠,但不幸的是会阻止选中。

解决方案

我最终发现了 这篇帖子,它提出了以下CSS变通方法:

vaadin-grid vaadin-grid-tree-toggle {
    /* Allow expanding of nodes only by the toggle icon, instead of the whole cell. */
    pointer-events: none;
    &::part(toggle) {
        pointer-events: auto;
    }
}

可以放在CSS文件中,并在Java代码中与 @StyleSheet 一起使用。经过此修改,如果我在原始屏幕上点击 1,就会得到如下结果,符合预期:

enter image description here

并且必须明确地点击 > 以进行展开(同时保持当前的选中状态):

enter image description here

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章