在gwt上将小部件设置为TreeItem

时间:2016-10-29 16:02:12

标签: java gwt widget

我必须在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;
    }   
} 

1 个答案:

答案 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是最简单的工作示例 - 我已经成功测试了它。