Vaadin TreeGrid没有展开或折叠图标

Vaadin TreeGrid没有展开或折叠图标,vaadin,treegrid,vaadin-flow,Vaadin,Treegrid,Vaadin Flow,我使用Vaadin创建了一个简单的Web应用程序,其中包含一个TreeGrid。 此时会显示TreeGrid,但是没有用于扩展或折叠根元素(“2010年”或“2011年”)的句柄,尽管有子元素。 当我使用expand(..)方法时,树被展开(如屏幕截图所示),但是没有图标来折叠它。在下面的屏幕截图中,“2011年”是扩展的根节点,“客户项目1”和“客户项目2”是子节点。 该项目是用Maven构建的,我使用vaadin-grid-flow-3.0.3.jar的13.0.2版本。 屏幕截图下面是我使

我使用Vaadin创建了一个简单的Web应用程序,其中包含一个TreeGrid。 此时会显示TreeGrid,但是没有用于扩展或折叠根元素(“2010年”或“2011年”)的句柄,尽管有子元素。 当我使用expand(..)方法时,树被展开(如屏幕截图所示),但是没有图标来折叠它。在下面的屏幕截图中,“2011年”是扩展的根节点,“客户项目1”和“客户项目2”是子节点。 该项目是用Maven构建的,我使用vaadin-grid-flow-3.0.3.jar的13.0.2版本。 屏幕截图下面是我使用的代码。我认为问题一定出在方法createTreeGrid()的某个地方。 这里可以找到Vaadin的工作示例

有人知道如何解决这个问题吗?感谢您的帮助……:-)

托尔斯滕

包你好;
@路线
公共类主视图扩展了垂直布局
{
公共主视图()
{
添加(createTreeGrid());
}
私有TreeGrid createTreeGrid()
{
TreeGrid TreeGrid=新的TreeGrid();
最终列表GenerateProjectsForeyears=GenerateProjectsForeyears(2010、2016);
setItems(GenerateProjectsForEars,Project::getSubProjects);
treeGrid.addColumn(项目::getName).setHeader(“项目名称”).setId(“名称列”);
treeGrid.addColumn(项目::getHoursDone.setHeader(“小时完成”);
treeGrid.addColumn(项目::getLastModified).setHeader(“上次修改”);
treeGrid.expand(generateProjectsForEars.get(1));//有效!
返回树;
}
私有列表GenerateProjectsForyear(int startYear,int endYear)
{
列表项目=新建ArrayList();
对于(int year=startYear;year project.getHoursDone())
.reduce(0,整数::和);
}
公共日期getLastModified()
{
返回getSubProjects().stream()
.map(project->project.getLastModified())
.max(日期::compareTo).orElse(空);
}
}
私有类项目扩展项目
{
私人室内活动时间;
上次修改的私人日期;
公共项目(字符串名称,整数小时完成,整数年)
{
超级(姓名);
this.hoursDone=hoursDone;
随机=新随机();
lastModified=新日期(1900年,随机。下一个日期(12),
随机。nextInt(10));
}
@凌驾
public int getHoursDone()
{
返回小时完成;
}
@凌驾
公共日期getLastModified()
{
返回最后修改;
}
}
}

您必须定义层次结构列

所以简单地替换

treeGrid.addColumn(Project::getName).setHeader(“Project Name”).setId(“Name column”)


treeGrid.addHierarchyColumn(Project::getName).setHeader(“Project Name”).setId(“Name column”)

谢谢您的帮助。我看到了一个方法setHierachyColumn(),但因为它没有在官方示例中使用,所以我没有尝试。它也很容易与瓦丁的不同版本混淆。
package hello;


@Route
public class MainView extends VerticalLayout
{

public MainView()
{
    add( createTreeGrid() );
}

private TreeGrid<Project> createTreeGrid()
{
    TreeGrid<Project> treeGrid = new TreeGrid<>();
    final List<Project> generateProjectsForYears = generateProjectsForYears( 2010, 2016 );
    treeGrid.setItems( generateProjectsForYears, Project::getSubProjects );

    treeGrid.addColumn( Project::getName ).setHeader( "Project Name" ).setId( "name-column" );
    treeGrid.addColumn( Project::getHoursDone ).setHeader( "Hours Done" );
    treeGrid.addColumn( Project::getLastModified ).setHeader( "Last Modified" );

    treeGrid.expand( generateProjectsForYears.get( 1 ) );  // works!

    return treeGrid;
}

private List<Project> generateProjectsForYears( int startYear, int endYear )
{
    List<Project> projects = new ArrayList<>();

    for ( int year = startYear; year <= endYear; year++ )
    {
        Project yearProject = new Project( "Year " + year );

        Random random = new Random();

        for ( int i = 1; i < 2 + random.nextInt( 5 ); i++ )
        {
            Project customerProject = new Project( "Customer Project " + i );
            customerProject.setSubProjects( Arrays.asList(
                    new LeafProject( "Implementation", random.nextInt( 100 ), year ),
                    new LeafProject( "Planning", random.nextInt( 10 ), year ),
                    new LeafProject( "Prototyping", random.nextInt( 20 ), year ) ) );
            yearProject.addSubProject( customerProject );
        }
        projects.add( yearProject );
    }
    return projects;
}

private class Project
{

    private List<Project> subProjects = new ArrayList<>();
    private String name;

    public Project( String name )
    {
        this.name = name;
    }

    public String getName()
    {
        return name;
    }

    public List<Project> getSubProjects()
    {
        return subProjects;
    }

    public void setSubProjects( List<Project> subProjects )
    {
        this.subProjects = subProjects;
    }

    public void addSubProject( Project subProject )
    {
        subProjects.add( subProject );
    }

    public int getHoursDone()
    {
        return getSubProjects().stream()
                .map( project -> project.getHoursDone() )
                .reduce( 0, Integer::sum );
    }

    public Date getLastModified()
    {
        return getSubProjects().stream()
                .map( project -> project.getLastModified() )
                .max( Date::compareTo ).orElse( null );
    }
}

private class LeafProject extends Project
{

    private int hoursDone;
    private Date lastModified;

    public LeafProject( String name, int hoursDone, int year )
    {
        super( name );
        this.hoursDone = hoursDone;
        Random random = new Random();
        lastModified = new Date( year - 1900, random.nextInt( 12 ),
                                 random.nextInt( 10 ) );
    }

    @Override
    public int getHoursDone()
    {
        return hoursDone;
    }

    @Override
    public Date getLastModified()
    {
        return lastModified;
    }
}

}