如何将 EList 设置为 JFace TableViewer 中的输入?

How can I set an EList as an input in JFace TableViewer?

这是我的第一个 SO 问题。我希望我提供足够的细节。
我有一个带有名为 ScopeContainer 的 class 的 EMF 模型,它有两个不同类型的包含引用 EList

我已经生成了

使用 Genmodel 的代码

我试图在只有一列的 org.eclipse.jface.viewers.TableViewer 中显示其中一个列表的内容。

这不能是 org.eclipse.swt.widgets.List,因为我希望能够编辑这些条目。

TableViewer viewer;
AdapterFactory adapterFactory = storage.getDomain().getAdapterFactory();
AdapterFactoryLabelProvider labelProvider = new AdapterFactoryLabelProvider(adapterFactory);
AdapterFactoryContentProvider contentProvider = new AdapterFactoryContentProvider(adapterFactory);

viewer.setLabelProvider(labelProvider);
viewer.setContentProvider(contentProvider);
viewer.setInput(project.getScopecontainer().getFilters());

当我将输入设置为 ScopeContainer 对象时。我可以看到两个列表中的所有对象 当我将输入设置为 EList<Filter> 时,Table 为空。 我需要做什么才能将 TableViewer 的输入设置为 EList?

一个简单的解决方案是将 AdapterFactoryContentProvider.getElements() 覆盖为 return 一个 Filter 元素的数组(源自 EList<Filter> 输入)。

你应该勾选 class org.eclipse.jface.viewers.ArrayContentProvider 或者 class org.eclipse.jface.databinding.viewers.ObservableListContentProvider,这取决于您的列表是否应该更改。

这些内容提供商完全按照您的要求进行操作:管理 table 或查看者的集合输入。

按照建议,我像这样覆盖了 getElements 方法:

public class EListContentProvider<T> extends AdapterFactoryContentProvider{

    public EListContentProvider(AdapterFactory adapterFactory) {
        super(adapterFactory);
    }

    @Override
    public Object[] getElements(Object inputElement) {
        Object[] arr = null;
        if(inputElement instanceof EList) {
            arr = ((EList<T>) inputElement).toArray();
        }
        return arr;
    }
}