2011-12-22 28 views
1

使用vaadin的TreeTable進行即時通訊,並試圖爲我的行添加工具提示。這是他們如何說它應該做的,但propertyId始終爲空,所以我不能得到正確的列?是的心中已經在Eclipse調試器藏漢運行此=)ItemDescriptionGenerator for vaadin TreeTable只對列返回null

與此相關的部分代碼:

private void init() { 
    setDataSource(); 
    addGeneratedColumn("title", new TitleColumnGenerator()); 
    addGeneratedColumn("description", new DescriptionGenerator()); 
    setColumnExpandRatios(); 
    setItemDescriptionGenerator(new TooltipGenerator()); 
} 

protected class TooltipGenerator implements ItemDescriptionGenerator{ 
     private static final long serialVersionUID = 1L; 

     @Override 
     public String generateDescription(Component source, Object itemId, Object propertyId) { 
      TaskRow taskRow = (TaskRow)itemId; 
      if("description".equals(propertyId)){ 
       return taskRow.getDescription(); 
      }else if("title".equals(propertyId)){ 
       return taskRow.getTitle(); 
      }else if("category".equals(propertyId)){ 
       return taskRow.getCategory().toString(); 
      }else if("operation".equals(propertyId)){ 
       return taskRow.getOperation().toString(); 
      }else if("resourcePointer".equals(propertyId)){ 
       return taskRow.getResourcePointer(); 
      }else if("taskState".equals(propertyId)){ 
       return taskRow.getTaskState().toString(); 
      } 
      return null; 
     }  
    } 
+0

聞起來像一個艱難的..這可能是無關的,但你使用什麼樣的數據容器? TaskRow對象是否爲非空?表格渲染否則很好?你調試了調用generateDescription()的方法嗎? – miq 2011-12-22 13:43:05

+0

所有其他對象指向正確,即時使用我自己的數據容器,實現分層容器接口。這個容器在其他所有方面都有很好的效果,但不是這樣。 – Marthin 2011-12-22 15:50:20

+0

「generateDescription」方法的propertyId的JavaDoc說:單元的propertyId,獲取行描述時爲null。這可能是相關的嗎?但是還有另一種解決方案:爲什麼不創建例如每個列生成器中都有一個標籤,並且不要將描述設置爲它? – janhink 2012-02-03 09:58:55

回答

1

將項目添加到該樹時,我已經通過了源對象爲的itemId。

Node node = ...; 
Item item = tree.addItem(node); 

這使用對象「節點」作爲id。然後允許我在generateDescription方法中將itemId作爲Node的一個實例。

public String generateDescription(Component source, Object itemId, Object propertyId) { 
    if (itemId instanceof Node) { 
     Node node = (Node) itemId; 
     ... 

也許不是最好的解決方案,但它適用於我。然後再次,我直接將項目添加到樹,而不是使用DataContainer。