2016-08-02 4 views
2

바딘 트리에서 특정 아이템의 형제를 알아야합니다.바딘 트리 아이템의 형제가 되나요?

Object itemId = event.getItemId(); 
Object parentId = tree.getParent(itemId); 
Collection siblings = tree.getChildren(parentId); 

을하지만 항목 ID가 뿌리 중 하나입니다 때 문제가 예를 들어,이 : :이 작업을 수행 할 수 있습니다

item1 
    childen1.1 
    children1.2 
item2 
item3 

내가 item1의 형제 자매를하려는 경우. 어떤 도움이 필요합니까?

답변

1

항목에 부모가 없으면 (즉, tree.getParent(itemId) == null) 루트입니다. 그 형제가 다른 루트 항목이므로 그렇지 않다면 항목의 부모와 자식을 가져옵니다.

코드 :

public class TreeSiblingsComponent extends VerticalLayout { 
    public TreeSiblingsComponent() { 
     Tree tree = new Tree(); 
     addComponent(tree); 

     // some root items 
     tree.addItem("1"); 
     tree.setChildrenAllowed("1", false); 
     tree.addItem("2"); 
     tree.setChildrenAllowed("2", false); 

     // an item with hierarchy 
     tree.addItem("3"); 
     tree.addItem("4"); 
     tree.setChildrenAllowed("4", false); 
     tree.setParent("4", "3"); 
     tree.addItem("5"); 
     tree.setChildrenAllowed("5", false); 
     tree.setParent("5", "3"); 
     tree.expandItem("3"); 

     // another root 
     tree.addItem("6"); 
     tree.setChildrenAllowed("6", false); 

     // another item with children that have children 
     tree.addItem("7"); 
     tree.addItem("8"); 
     tree.setParent("8", "7"); 
     tree.addItem("9"); 
     tree.setChildrenAllowed("9", false); 
     tree.setParent("9", "8"); 
     tree.addItem("10"); 
     tree.setChildrenAllowed("10", false); 
     tree.setParent("10", "8"); 
     tree.expandItemsRecursively("7"); 

     // label to display siblings on selection 
     Label siblings = new Label("Nothing selected"); 
     siblings.setCaption("Siblings:"); 
     addComponent(siblings); 

     tree.addItemClickListener(event -> { 
      Object parent = tree.getParent(event.getItemId()); 
      if (parent == null) { 
       // root items have no parent 
       siblings.setValue(tree.rootItemIds().toString()); 
      } else { 
       // get parent of selected item and its children 
       siblings.setValue(tree.getChildren(parent).toString()); 
      } 
     }); 
    } 
} 

결과 :

다음은 시작해야 기본 샘플 (선택된 노드는 형제의 목록에 나타납니다 점에 유의하시기 바랍니다)입니다

Sibling selection

관련 문제