Добавить листовые и неконечные узлы на одном уровне в GWT CellBrowser или Cell Tree
Я хочу добавить non-leaf
так же как leaf
nodes
на том же уровне в 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;
}