1

vaadin の TreeTable を使用していて、行にツールチップを追加しようとしています。これは彼らがそれを行うべきだと言っている方法ですが、propertyId は常に null であるため、正しい列を取得できませんか? そして、はい、これをEclipseデバッガーでも実行します=)

この部分に関連するコード:

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;
        }       
    }
4

1 に答える 1

1

アイテムをツリーに追加するときに、ソース オブジェクトを itemId として渡しました。

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

これはオブジェクト「ノード」を ID として使用します。これにより、itemId を generateDescription メソッドで Node のインスタンスとしてキャストできます。

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

最善の解決策ではないかもしれませんが、私にとってはうまくいきます。ここでも、DataContainer を使用するのではなく、アイテムをツリーに直接追加しています。

于 2015-04-02T01:22:02.330 に答える