2012-06-28 67 views
3

GWT不包含TreeTable,但我的項目需求與樹表。所以我通過使用TreeFlexTable來創建它。用TreeItem和FlexTable自定義GWT樹表

這裏Bean類:項目

class Item 
{ 
ItemType itemType; //Parent,Child Enum type 
long parentId; 
long amount; 
String itemName; 
String qty; 
String rate; 
//Setter/Getter Methods 
} 

具有父項目&子項之間的關係,這是自TreeItem類。我創建了一行通過使用TreeItemNode。

public class TreeItemNode extends TreeItem { 
     private FlexTable table; //this will use to access child 
     private FlexTable parentTable; //This will use to access parent of particular child. 
    //This constructor create parent node 
     public TreeItemNode(FlexTable parentTable) { 
      setWidget(parentTable); 
      this.parentTable=parentTable; 
      setState(true); 
     } 
    //The method used to add Child items in parent 
     public TreeItem addItem(Widget widget) { 
      this.table=(FlexTable) widget; 
      TreeItem ret = new TreeItem(widget); 
      addItem(ret); 
      return ret; 
     } 
    } 

使用Item List,該方法創建具有父節點和子節點關係的樹。

class CustomTreeTable extends Tree 
{ 
    public void createTreeTable() { 
      //This map store parent id and tree item object for letter fetch the parent node and add child node in it 
       treeItemMap = new HashMap<Long, BOQTreeItem>(); 
      for (Item item : itemList) { 
       if (item.getParentItemId() == 0) { 
       //Create new parent node 
        TreeItemNode itemTreeItem = new TreeItemNode(addChildItem(item, 
          new FlexTable(), true), 
          "gwt-TreeNode"); 
        treeItemMap.put(item.getId(), treeItem); 
        addItem(itemTreeItem); 
       } else { 
       //Add child node 
        if (treeItemMap.containsKey(item.getParentItemId()) 
          && treeItemMap.get(item.getParentItemId()) != null) { 
         FlexTable dataFlextable = treeItemMap.get(
           item.getParentItemId()).getTable(); 
         if (dataFlextable == null) { 
          dataFlextable = new FlexTable(); 
          treeItemMap.get(item.getParentItemId()).setTable(
            dataFlextable); 
         } 
         FlexTable treeTable = addChildItem(item, dataFlextable, 
           false); 
         treeItemMap.get(item.getParentItemId()).addItem(treeTable); 
        } 
       } 
      } 
     } 

} 

使用這個表格如下。 +是我的樹節點打開/關閉,如:

ItemName qty rate amount 
+ item1 11 1 11 //parent item 
--------------------------- 
- item2 11 2 22 
-------------------------------- 
    SubItemName qty rate amount //child item 
    subItem1 5 2 10 
    subItem2 8 5 40 
------------------------------------ 

的問題是,當我想計算數量*在一個原始(子項),速度比我所能做的使用行索引,但如果我想要做的計算所有子項&顯示在父行中。那麼邏輯變得如此複雜。所以我只想知道我實現的邏輯,比如將實例存儲在地圖中並進行管理。這是否正確?我會走向正確的方向或錯誤。

回答

0

也許使用DataGrid Widget對於您試圖實現的內容會更簡單。

看看在GWT展示:here

在DataGrid中,你必須根據父行的孩子的,當你點擊鏈接ShowFriends顯示。

希望它有幫助。 :)