我必须在gwt上实现一棵树。我正在实现一个扩展Widget的对象,以便在TreeItem上设置它。
问题是,如果我在TreeItem上设置这个对象(只有字符串和整数字段),我就再也看不到树了。
问题出在哪里?我看不到它。
private Tree frontEndTree;
private void buildTree(HashMap<Long, Categoria> categoriaMap) {
for(Categoria categoria : categoriaMap.values()) {
if(categoria.getLevel() != 1) continue;
TreeItem firstLevel = //this.frontEndTree.addTextItem(categoria.getDescription());
this.frontEndTree.addTextItem(categoria.getDescription());
ItemTree itemTree = new ItemTree(categoria);
firstLevel.setWidget((Widget)itemTree);
this.visitaAlbero(firstLevel, categoria.getDescendants());
}
}
private void visitaAlbero(TreeItem parentItem, ArrayList<Categoria> categorie) {
if(categorie == null) return;
if(categorie.isEmpty()) return;
TreeItem node = null;
for(Categoria item : categorie) {
if(node == null) {
node = parentItem.addTextItem(item.getDescription());
node.setWidget(new ItemTree(item));
visitaAlbero(node, item.getDescendants());
continue;
}
node.addTextItem(item.getDescription());
node.setWidget(new ItemTree(item));
visitaAlbero(node, item.getDescendants());
}
}
/**
* Inner class che gestisce il widget principale
* del treeitem
*
* @author Giuseppe Pedullà
*
*/
public class ItemTree extends Widget implements Serializable, IsWidget {
/**
*
*/
private static final long serialVersionUID = 5347332077472260376L;
private Long id;
private String description;
private Integer level;
public ItemTree(Categoria categoria) {
this.id = categoria.getId();
this.description = categoria.getDescription();
this.level = categoria.getLevel();
}
public String getDescription() {
String valueID = "";
if(id < 10) {
valueID = "00" + id;
} else if(id < 100) {
valueID = "0" + id;
} else {
valueID = "" + id;
}
return valueID + " - " + description;
}
//GETTERS
public Long getId() {
return id;
}
public Integer getLevel() {
return level;
}
@Override
public String toString() {
return description;
}
}
答案 0 :(得分:1)
问题出在您的ItemTree
课程中。它扩展了Widget,但没有为该小部件设置任何元素。至少它缺少asWidget
方法。它可能是这样的:
@Override
public Widget asWidget() {
return new Label(getDescription());
}
你可以像这样使用它:
firstLevel.setWidget(itemTree.asWidget());
更简单的方法是扩展Composite
而不是Widget
。您只需要在构造函数中调用initWidget
方法:
public class ItemTree extends Composite implements Serializable, IsWidget {
...
public ItemTree(Categoria categoria) {
this.id = categoria.getId();
this.description = categoria.getDescription();
this.level = categoria.getLevel();
initWidget(new Label(getDescription())); // <- !!!
}
...
}
你可以使用你想要的Widget
来创建initWidget - Label
是最简单的工作示例 - 我已经成功测试了它。