2016-10-29 7 views
2

gwtにツリーを実装する必要があります。 TreeItemでウィジェットを設定するオブジェクトを実装しています。gwtの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

問題はItemTreeクラスにあります。これはウィジェットを拡張しますが、そのウィジェットの要素は設定しません。少なくともasWidgetメソッドが欠けています。それはこのように、たとえば次のようになります。

@Override 
public Widget asWidget() { 
    return new Label(getDescription()); 
} 

そして、あなたはこのようにそれを使用することができます。

firstLevel.setWidget(itemTree.asWidget()); 

簡単に方法はなくWidgetCompositeを拡張することです。あなただけのコンストラクタで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は、最も簡単な実施例である - 私はそれをテストに成功しています。

+0

ありがとう、私はすぐに試してみます。私はそれが十分でない場合、ウィジェットを拡張する点は何かを知っているだろう。 – Peduz

+0

別のことをお聞きしたいと思います。ノードにclickListenerを追加すると、サーバー側でCompositeを拡張するObjectの情報を使用できますか?ありがとう。 – Peduz

+0

私は助けることができてうれしいです。別の質問を投稿してください。私たちはその質問に答えようとします。 – Adam

関連する問題