Добавить листовые и неконечные узлы на одном уровне в GWT CellBrowser или Cell Tree

Я хочу добавить non-leaf так же как leafnodes на том же уровне в GWT CellBrowser/ Cell Tree. Могу ли я это сделать? если да, то как? Потому что, возвращаясь DefaultNodeInfo Я не получаю возможность вернуть оба вида ListDataProviders,

2 ответа

Решение

Простым решением было бы создать суперкласс или интерфейсный узел, который ваш NonLeafNode и ваш класс LeafNode расширяют / реализуют:

public class NonLeafNode extends Node{
}

или же

public class NonLeafNode implements Node{
}

Затем вы можете дать CellBrowser или CellTree один ListDataProvider, который обеспечивает оба типа узла. В базовой модели, например TreeViewModel, вам необходимо настроить функции isLeaf(Object o) и getNodeInfo(T value) следующим образом:

public boolean isLeaf(Object value) {
    if (value instanceof NonLeafNode) return true;
    if (value instanceof LeafNode) return false;
    return false;
}

public <T> getNodeInfo(T value){
    if (value instanceof NonLeafNode) 
         // return node info for non-leaf-node
        ;
    else if (value instanceof LeafNode)
         // return node info for leaf node
        ;
    return null;
}

Мой выход!

private static class Folder
        {
            private final String        name;

            private final List<Folder>  folder  = new ArrayList<Folder>();

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

            public String getName()
            {
                return name;
            }

            public void addFolder(Folder p)
            {
                this.folder.add(p);
            }

            public List<Folder> getFolders()
            {
                return folder;
            }
        }

затем в CustomTreeModel, который мы создаем, переопределяем isLeaf следующим образом

        public boolean isLeaf(Object value)
        {
            if (value instanceof String || (value instanceof Folder && ((Folder) value).getFolders().isEmpty()))
            {
                return true;
            }
            return false;
        }
Другие вопросы по тегам