2011-12-22 73 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。