В Vaadin TreeGrid отсутствует значок развертывания или свертывания. - PullRequest
1 голос
/ 28 марта 2019

Я использую Vaadin для создания простого веб-приложения, которое содержит одну TreeGrid.TreeGrid обнаруживается, но нет ручки для развертывания или свертывания корневого элемента («Год 2010» или «Год 2011»), хотя есть дочерние элементы.Когда я использую метод expand (..), дерево раскрывается (как показано на скриншоте), но нет значка, чтобы свернуть его.На снимке экрана ниже «Год 2011» - это расширенный корневой узел, где «Customer Project1» и «Customer Project 2» являются дочерними.Проект собран с Maven, я использую vaadin-bom версии 13.0.2 с vaadin-grid-flow-3.0.3.jar.Ниже скриншота есть код, который я использую.Я думаю, что проблема должна быть где-то в методе createTreeGrid ().Рабочий пример от Ваадина можно найти здесь Пример Ваадина

Так что у кого-нибудь есть идеи, как решить эту проблему?любая помощь приветствуется ... :-)

Торстен

Screenshot

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;
    }
}

}

1 Ответ

2 голосов
/ 28 марта 2019

Вы должны определить столбец иерархии.

Так просто замените

treeGrid.addColumn( Project::getName ).setHeader( "Project Name" ).setId( "name-column" );

с

treeGrid.addHierarchyColumn( Project::getName ).setHeader( "Project Name" ).setId( "name-column" );

...