3
GWT不包含TreeTable,但我的項目需求與樹表。所以我通過使用Tree和FlexTable來創建它。用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
------------------------------------
的問題是,當我想計算數量*在一個原始(子項),速度比我所能做的使用行索引,但如果我想要做的計算所有子項&顯示在父行中。那麼邏輯變得如此複雜。所以我只想知道我實現的邏輯,比如將實例存儲在地圖中並進行管理。這是否正確?我會走向正確的方向或錯誤。