Как получить путь к выбранному элементу из CellTree в GWT - PullRequest
2 голосов
/ 26 октября 2011

У меня есть CellTree, содержащий список организаций.В модели каждый родитель содержит список детей.Есть ли простой способ получить путь к выбранному элементу?или я должен пойти с обычным методом, перебирая дерево и ища по id.

Спасибо

Ответы [ 3 ]

2 голосов
/ 14 марта 2012

Не элегантное решение.Я выбираю путь из бизнес-модели вместо дерева.

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 голосов
/ 27 октября 2011

В самом CellTree нет встроенных функций для извлечения пути для выбранного элемента.
Вам придется вручную пройти через древовидную структуру, чтобы получить путь. Вы можете использовать рекурсивную функцию для получения пути. Я сделал что-то подобное, но для другой цели (программно открывая узлы в CellTree).

0 голосов
/ 18 мая 2012

Ну, я надеюсь, это не кажется слишком очевидным или не соответствует тому, что вы ищете. Но один из способов думать об этом - начать с выбранного узла и идти вверх (не начинать с корня и не идти вниз). В 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;   
}

Лучший, Martin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...