3

GWT 不包含 TreeTable,但我的项目要求包含树表。所以我使用TreeFlexTable创建了它。

这里 Bean 类:Item

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;
        }
    }

使用项目列表,此方法正在创建具有父节点和子节点关系的树。

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
------------------------------------

问题是当我想计算一个原始(子项)中的 qty* 率时,我可以使用行索引来计算,但是如果我想计算所有子项并在父行中显示。然后逻辑变得如此复杂。所以我只想知道我实现的逻辑,比如将实例存储在地图中并进行管理。合适吗?我正朝着正确的方向或错误的方向前进。

4

1 回答 1

0

对于您要实现的目标,也许使用 DataGrid Widget 会更简单。

看看 GWT ShowCase:这里

在 DataGrid 上,当您单击 ShowFriends 链接时,您会在父行下显示子项。

希望能帮助到你。:)

于 2014-02-26T14:27:55.953 回答