我有一个包含组织列表的CellTree
。在模型中,每个父项都包含一个子项列表。
有没有一种简单的方法来获取所选项目的路径?或者我必须通过遍历树并通过id查找通常的方法。
由于
答案 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;
}
最佳, 马丁