gwt - 使用 TreeItem 和 FlexTable 自定义 GWT 树表

标签 gwt

GWT不包含TreeTable,但我的项目要求包含树表。所以我使用 Tree 创建它和 FlexTable .

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

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

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

最佳答案

也许使用 DataGrid 小部件会更简单地实现您想要实现的目标。

查看 GWT 展示:here

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

希望有帮助。 :)

关于gwt - 使用 TreeItem 和 FlexTable 自定义 GWT 树表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11241550/

相关文章:

java - GWTEventService 推送到所有客户端

html - 推特按钮 : wrong count (too many)

java - 扩展不同基类的类包装器

java - GAE/GWT java 应用程序中的 OAuth2 token 无效

java - 维护 GWT Web 应用程序的构建版本号

java - Maven Intellij IDEA 无法 gwt 编译类

java - 对于 GWT java FlexTable,如何获取值更改时选定的行号

gwt - GXT (EXT-GWT) 项目编译失败 - 默认设置

java - GWT 和泛型

java - GWT/ eclipse : ClassNotFoundException com/google/gwt/dev/Compiler