在GWT单元浏览器或单元树的同一级别添加叶节点和非叶节点
我想在GWT CellBrowser/单元树中的同一级别添加在GWT单元浏览器或单元树的同一级别添加叶节点和非叶节点,gwt,cellbrowser,Gwt,Cellbrowser,我想在GWT CellBrowser/单元树中的同一级别添加非叶以及叶节点。我能做吗?如果是,如何进行?因为在返回DefaultNodeInfo时,我没有选择返回两种ListDataProviders 一个简单的解决方案是创建一个超类或接口节点,NonLeafNode和LeafNode类扩展/实现该节点: public class NonLeafNode extends Node{ } 或 然后,您可以为CellBrowser或CellTree提供一个ListDataProvider,它提供两
非叶
以及叶
节点
。我能做吗?如果是,如何进行?因为在返回DefaultNodeInfo
时,我没有选择返回两种ListDataProviders
一个简单的解决方案是创建一个超类或接口节点,NonLeafNode和LeafNode类扩展/实现该节点:
public class NonLeafNode extends Node{
}
或
然后,您可以为CellBrowser或CellTree提供一个ListDataProvider,它提供两种类型的节点。在底层模型(例如TreeView模型)中,需要按如下方式调整isLeaf(对象o)和getNodeInfo(T值)函数:
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;
}
公共布尔isLeaf(对象值){
if(value instanceof NonLeafNode)返回true;
if(value instanceof LeafNode)返回false;
返回false;
}
公共getNodeInfo(T值){
if(非叶节点的值instanceof)
//返回非叶节点的节点信息
;
else if(叶节点的值实例)
//返回叶节点的节点信息
;
返回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;
}
}
我找到了一个办法。别担心,伙计们。如果你们能分享你们的解决方案就好了。@Karna检查添加的答案。@SusannBrunner这种方法也很好。我创建了一个具有自引用数组的类,并检查数组是否为null,然后检查叶,如果不是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;
}
}
public boolean isLeaf(Object value)
{
if (value instanceof String || (value instanceof Folder && ((Folder) value).getFolders().isEmpty()))
{
return true;
}
return false;
}