【问题标题】:Set widget to TreeItem on gwt在 gwt 上将小部件设置为 TreeItem
【发布时间】:2016-10-30 05:29:22
【问题描述】:

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

【问题讨论】:

    标签: java gwt widget


    【解决方案1】:

    问题出在你的ItemTree 班级。它扩展了小部件,但没有为该小部件设置任何元素。至少它缺少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 是最简单的工作示例 - 我已经成功测试了它。

    【讨论】:

    • 谢谢,我会尽快尝试。如果还不够,我会知道扩展小部件的意义何在。
    • 我想再问你一件事:如果我在节点上添加一个clickListener,我可以在服务器端使用扩展Composite的Object的信息吗?谢谢。
    • 很高兴能帮上忙。请发布另一个问题,我们会尽力回答。
    猜你喜欢
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多