Vaadin 8.1 TreeGrid中的Collapseitems和ExpandItems替换

Vaadin 8.1 TreeGrid中的Collapseitems和ExpandItems替换,vaadin,vaadin8,Vaadin,Vaadin8,Vaadin 8.1引入了TreeGrid组件。它不再具有collapseitemsrescircously和expanditemsrescircously方法(如现在遗留的树组件中提供的)。我是否遗漏了什么,或者您是否需要开发自己的实现?如果是,建议采用什么方法进行此操作?从中,您可以使用这些方法,并通过传递treegrid数据项的列表或数组来展开或折叠: treeGrid.expand(someTreeGridItem1, someTreeGridItem2); treeGrid.colla

Vaadin 8.1引入了
TreeGrid
组件。它不再具有
collapseitemsrescircously
expanditemsrescircously
方法(如现在遗留的
组件中提供的)。我是否遗漏了什么,或者您是否需要开发自己的实现?如果是,建议采用什么方法进行此操作?

从中,您可以使用这些方法,并通过传递treegrid数据项的列表或数组来展开或折叠:

treeGrid.expand(someTreeGridItem1, someTreeGridItem2);
treeGrid.collapse(someTreeGridItem1);
同样值得注意的是,有一节显示了从的功能,您可以使用这些方法,并通过传递treegrid数据项的列表或数组来展开或折叠:

treeGrid.expand(someTreeGridItem1, someTreeGridItem2);
treeGrid.collapse(someTreeGridItem1);

同样值得注意的是,有一节展示了

的功能,我相信您已经注意到,TreeGrid是一个相当新的组件,目前正在开发中,并从v8.1.alphaX开始提供(当前的稳定版本是v8.0.6)。因此,目前它可能只有一些基本功能,其他功能将在将来某个时候提供,尽管没有保证。例如,自2011年以来一直处于开放状态

无论哪种方式,即使它们可能不是最佳解决方案,您也可以使用一些变通方法来实现此行为。我无耻地使用了一个基本示例,这是当前在中可用的代码的一个稍加修改的版本

可能的情况:

  • 展开根时自动展开整个层次结构-添加侦听器,并展开/折叠整个展开的层次结构:
  • treeGrid.addCollapseListener(事件->{
    if(event.isUserOriginated()){
    //事件由所有折叠调用触发,因此仅当用户在UI中单击时才执行此操作
    //忽略编程调用
    treeGrid.collapse(event.getCollapsedItem().flant().collect(Collectors.toList());
    }
    });
    treeGrid.addExpandListener(事件->{
    if(event.isUserOriginated()){
    //事件由所有展开调用触发,因此仅当用户在UI中单击时才执行此操作
    //忽略编程调用
    expand(event.getExpandedItem().flant().collect(Collectors.toList());
    }
    });
    
  • 使用自定义操作(如关联菜单)扩展层次结构或其一部分
  • GridContextMenu contextMenu=newgridcontextmenu(treeGrid);
    contextMenu.addGridBodyContextMenuListener(contextEvent->{
    contextMenu.removietems();
    if(contextEvent.getItem()!=null){
    项目=(项目)contextEvent.getItem();
    //更新选择
    treeGrid.select(项目);
    //显示扩展选项
    contextMenu.addItem(“全部展开”,VaadinIcons.PLUS,事件->treeGrid.Expand((project).flatte().collect(Collectors.toList()));
    //显示用于折叠的选项
    contextMenu.addItem(“Collapse all”,VaadinIcons.减号,事件->treeGrid.Collapse((project).flatte().collect(Collectors.toList()));
    }
    });
    
    最后,你应该得到这样的效果:


    我相信您已经注意到,TreeGrid是一个相当新的组件,目前正在开发中,从v8.1.alphaX开始提供(当前的稳定版本是v8.0.6)。因此,目前它可能只有一些基本功能,其他功能将在将来某个时候提供,尽管没有保证。例如,自2011年以来一直处于开放状态

    无论哪种方式,即使它们可能不是最佳解决方案,您也可以使用一些变通方法来实现此行为。我无耻地使用了一个基本示例,这是当前在中可用的代码的一个稍加修改的版本

    可能的情况:

  • 展开根时自动展开整个层次结构-添加侦听器,并展开/折叠整个展开的层次结构:
  • treeGrid.addCollapseListener(事件->{
    if(event.isUserOriginated()){
    //事件由所有折叠调用触发,因此仅当用户在UI中单击时才执行此操作
    //忽略编程调用
    treeGrid.collapse(event.getCollapsedItem().flant().collect(Collectors.toList());
    }
    });
    treeGrid.addExpandListener(事件->{
    if(event.isUserOriginated()){
    //事件由所有展开调用触发,因此仅当用户在UI中单击时才执行此操作
    //忽略编程调用
    expand(event.getExpandedItem().flant().collect(Collectors.toList());
    }
    });
    
  • 使用自定义操作(如关联菜单)扩展层次结构或其一部分
  • GridContextMenu contextMenu=newgridcontextmenu(treeGrid);
    contextMenu.addGridBodyContextMenuListener(contextEvent->{
    contextMenu.removietems();
    if(contextEvent.getItem()!=null){
    项目=(项目)contextEvent.getItem();
    //更新选择
    treeGrid.select(项目);
    //显示扩展选项
    contextMenu.addItem(“全部展开”,VaadinIcons.PLUS,事件->treeGrid.Expand((project).flatte().collect(Collectors.toList()));
    //显示用于折叠的选项
    contextMenu.addItem(“Collapse all”,VaadinIcons.减号,事件->treeGrid.Collapse((project).flatte().collect(Collectors.toList()));
    }
    });
    
    最后,你应该得到这样的效果:


    一如既往,这是一个非常详细的答案。我不知道这有一个开放的功能要求。谢谢这基本上回答了我的问题。我知道如何展开/折叠。我怀疑可能有一种“新”(8.1)的方法可以做到这一点。@rmuller很酷,不幸的是,现在还没有。我一直在为TreeGrid寻找这样一个问题或功能请求,但我只找到了一个我链接的TreeTable,自2011年以来一直处于开放状态。什么
    public Stream<Project> flatten() {
        return Stream.concat(Stream.of(this), getSubProjects().stream().flatMap(Project::flatten));
    }