Eclipse:树视图和表视图

时间:2009-08-05 09:02:52

标签: eclipse eclipse-plugin

我想知道是否可以在Eclipse视图中为Tree和Table使用相同的内容和标签提供程序,或者它们必须具有单独的内容和标签提供程序。我正在尝试使用我为表格树写的内容和标签提供程序,但我在表格视图中看不到任何内容。

感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用相同的Label提供商。

您不能使用相同的内容提供程序,因为树内容提供程序必须实现ITreeContentProvider,它与必须由表内容提供程序实现的IStructuredContentProvider接口“兼容”。

不兼容“我的意思是TreeContentProvider中的IStructuredContentProvider.getElements(Object inputElement)方法的实现必须只返回”roots“对象,而它必须返回列表内容提供者的所有对象。

答案 1 :(得分:0)

您可以分享提供商。您的ContentProvider必须实现IStructuredContentProvider和ITreeContentProvider。我想通常你会想要有不同的内容提供商。

在示例中,树将仅显示具有元素的一个级别(所有元素都是根)。表格只显示一行。

示例:

    //ContentProvider for Tree and Table
public static class CommonContentProvider extends ArrayContentProvider
        implements ITreeContentProvider {

    @Override
    public Object[] getChildren(final Object arg0) {
        return null;
    }

    @Override
    public Object getParent(final Object arg0) {
        return null;
    }

    @Override
    public boolean hasChildren(final Object arg0) {
        return false;
    }
}

public static void testCommonProviderTreeTable(final Composite c) {
    final Collection<String> input = Arrays.asList(new String[] { "hi",
            "hola" });
    final IContentProvider contentProvider = new CommonContentProvider();
    final IBaseLabelProvider labelProvider = new LabelProvider() {
        @Override
        public String getText(final Object element) {
            return element.toString();
        }
    };
    final TreeViewer tree = new TreeViewer(c, SWT.NONE);
    tree.setContentProvider(contentProvider);
    tree.setLabelProvider(labelProvider);
    tree.setInput(input);

    final TableViewer table = new TableViewer(c, SWT.NONE);
    table.setContentProvider(contentProvider);
    table.setLabelProvider(labelProvider);
    table.setInput(input);
}