在树形网格中选择中间节点
使用 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);
}
}
显示如下:
如果我点击 1,得到如下结果(也就是展开但不选中)
如果我点击 1.1,得到如下
然而,我希望能够在不展开其子节点的情况下选中一个中间节点。在 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,就会得到如下结果,符合预期:
并且必须明确地点击 > 以进行展开(同时保持当前的选中状态):
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。




