2011-12-22 9 views
1

vaadinのTreeTableを使用していて、私の行のツールチップを追加しようとしています。これは、彼らがそれを行う必要があると言っている方法ですが、私は正しい列を取得できないようにpropertyIdは常にnullです?そして、そうi'vはaswell =日食デバッガでこれを実行します)この部分に関連ItemDescription 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オブジェクトはnullではありませんか?そうでなければテーブルはうまくレンダリングされますか? generateDescription()を呼び出すメソッドをデバッグしましたか? – miq

+0

他のすべてのオブジェクトが正しく指し示されています。階層コンテナインターフェイスを実装する独自のデータコンテナを使用しています。コンテナは他のすべての方法で優れています。 – Marthin

+0

メソッド 'generateDescription'のpropertyIdのJavaDocは、'セルのpropertyId、行記述を取得するときはnull'と表示します。これは関連していますか?しかし、別の解決策があります。各列ジェネレータのラベルには説明が設定されていませんか? – janhink

答えて

1

私はのitemIdとしてソースオブジェクトに合格しています。

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

これはidとしてオブジェクト "node"を使用します。次に、generateDescriptionメソッドでitemIdをNodeのインスタンスとしてキャストすることができます。

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

多分、最高の解決策ではないかもしれませんが、私のために働きます。次に、DataContainerを使用するのではなく、アイテムをツリーに直接追加します。

関連する問題