如何从GWT中的CellTree获取所选项的路径

时间:2011-10-26 15:02:25

标签: gwt path tree

我有一个包含组织列表的CellTree。在模型中,每个父项都包含一个子项列表。 有没有一种简单的方法来获取所选项目的路径?或者我必须通过遍历树并通过id查找通常的方法。

由于

3 个答案:

答案 0 :(得分:2)

CellTree本身没有任何内置功能来检索所选项目的路径 您必须手动遍历树结构才能获得路径。您可以使用递归函数来检索路径。我已经做了类似的事情,但出于不同的目的(以编程方式在CellTree中打开节点)。

答案 1 :(得分:2)

不是一个优雅的解决方案。我从业务模型而不是Tree中获取路径。

public void getNodeContainingEntity(EntityBase selectedEntity, TreeNode node){
    if (exit) return;
    int count = node.getChildCount();
    for(int i=0;i<count;i++){   
        EntityBase entityChild = (EntityBaseProxy) node.getChildValue(i);           
            if(selectedEntity.getNodeId() == entityChild.getNodeId()){
                    exit = true;
                    currentNode =  node;
            }
            else if(node.isChildOpen(i)){
                TreeNode n = node.setChildOpen(i, true);
                if(n!=null)
                    getNodeContainingEntity(selectedEntity,n);
            }           
    }
}


public List<EntityBaseProxy> getPath(EntityBase selectedEntity){
    exit = false;
    getNodeContainingEntity(selectedEntity,cellTree.getRootTreeNode());
    path.clear();
    path.add(selectedEntity);
    if (null == currentNode) return path;           
        path.add(((EntityBase)currentNode.getValue()));
        while (null != currentNode.getParent() ){
            currentNode  = currentNode.getParent();
            EntityBase entity = (EntityBase)currentNode.getValue();
            if (null != entity) path.add((EntityBaseProxy)currentNode.getValue());  
        }       
    return path;
}

答案 2 :(得分:-2)

嗯,我希望这听起来不太明显或错过你想要的东西。但是考虑它的一种方法是从选定的节点开始并上升(不是从根开始然后向下)。 GWT TreeItems有一个getParent()方法,所以继续调用它,将你得到的内容添加到列表中,直到你点击根(或什么都没有),这会给你一个反向路径作为节点列表上升,它是唯一的,一个节点只能有一个父节点,然后只需反转列表即可让你的路径下降。

这是一些未经测试的代码,旨在成为TreeItem的子类的方法(否则你将节点作为参数放到方法中,比如'selectedItem',然后在整个过程中替换selectedItem

ArrayList getPath(){
    ArrayList path= new ArrayList();  // in reverse ie going up
    path.add(this);
    TreeItem search;

    search=this.getParentItem();

    while (search!=null){
        path.add(search);
        search=search.getParentItem();      
    }

    Collections.reverse(path);  // now coming down from the root

return
        path;   
}

最佳, 马丁