2016-08-02 50 views
2

我需要得到Vaadin樹中某個物品的兄弟姐妹。我可以這樣做:獲得Vaadin樹項目的兄弟姐妹嗎?

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

但有一個問題,當條目標識是根源之一,例如:

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