2013-02-11 3 views
0

J'ai implémenté une structure CellTree dans java gwt qui ouvre ses fils en cliquant sur la petite flèche de la cellule. Est-il possible d'ouvrir le sous-arbre également en cliquant simplement sur la cellule elle-même et non explicitement sur la flèche?java gwt celltree

public class SomeCellTree extends Composite { 


    private SelectionModel selectionModel; 
    private CellTree cellTree; 



    private class SomeTreeViewModel implements TreeViewModel { 
     @Override 
     public <T> NodeInfo<?> getNodeInfo(T value) { 
      ... 
     } 

     @Override 
     public boolean isLeaf(Object value) { 
      ... 
     } 
    } 



    public SomeCellTree(...) { 

     this.selectionModel = new SingleSelectionModel(); 
     this.selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { 
      @Override 
      public void onSelectionChange(SelectionChangeEvent event) { 
         ... 
      } 
     }); 

     cellTree = new CellTree(new SomeTreeViewModel(),null,RESOURCES); 
     initWidget(cellTree); 

    } 


} 

Répondre

1

Vous devez utiliser la récursivité pour trouver le nœud du DTO sélectionné et vous devez appeler setChildOpen pour ouvrir le sous-arbre. Quelque chose comme ceci:

this.selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { 
    @Override 
    public void onSelectionChange(SelectionChangeEvent event) { 
     T selectedObj = selectionModel.getSelectedObject(); 
     TreeNode rootNode = cellTree.getRootTreeNode(); 
     openTree(rootNode,T); 
    } 
}); 


private void openTree(rootNode node,T object) { 
    for (int i = 0; i < node.getChildCount(); i++) { 
     if (!node.isChildLeaf(i)) { 
      find(node.setChildOpen(i, true)); 
      if (node.getValue().equals(T)) 
       return; 
     } 
    } 
}