2016-10-29 2 views
2

gwt에 트리를 구현해야합니다. TreeItem에 위젯을 설정하는 객체를 구현하고 있습니다.위젯을 TreeItem에 gwt에 설정하십시오.

문제는 내가 트리 (문자열과 정수 필드 만있는)이 개체를 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()); 

더 쉬운 방법은 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이 간단한 작업 예이다 - 나는 성공적으로 테스트했습니다.

+0

고마워, 곧 해보겠습니다. 위젯이 충분하지 않다면 위젯을 확장 할 시점이 무엇인지 알 것입니다. – Peduz

+0

다른 점을 물어보고 싶습니다. 노드에 clickListener를 추가하면 서버 측에서 Composite를 확장하는 Object의 정보를 사용할 수 있습니까? 감사. – Peduz

+0

내가 도울 수있어서 기쁩니다. 제발, 또 다른 질문을 게시하고 우리는 그들에게 대답하려고합니다. – Adam