在GWT CellBrowser或Cell Tree中的同一级别添加叶子和非叶子节点

时间:2013-11-07 06:20:02

标签: gwt cellbrowser

我想在GWT CellBrowser / Cell Tree中的同一级别添加non-leaf以及leaf nodes。我可以做吗?如果有,怎么样?因为在返回DefaultNodeInfo时,我无法选择返回ListDataProviders这两种类型。

2 个答案:

答案 0 :(得分:1)

一个简单的解决方案是创建一个超类或接口Node,你的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;
}

答案 1 :(得分:0)

我的出路!

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