我想知道是否可以在Eclipse视图中为Tree和Table使用相同的内容和标签提供程序,或者它们必须具有单独的内容和标签提供程序。我正在尝试使用我为表格树写的内容和标签提供程序,但我在表格视图中看不到任何内容。
感谢。
答案 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);
}