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

时间:2019-04-04 11:33:29

标签: java swt jface rcp emf

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

我已经生成了

  • 模型
  • model.edit 和
  • model.editor

使用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>时,表为空。 我该怎么做才能将TableViewer的输入设置为EList?

3 个答案:

答案 0 :(得分:3)

一个简单的解决方案是重写AdapterFactoryContentProvider.getElements()以返回Filter元素的数组(源自EList<Filter>输入)。

答案 1 :(得分:1)

按照建议,我像这样覆盖了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;
    }
}

答案 2 :(得分:0)

您应检查类 org.eclipse.jface.viewers.ArrayContentProvider 或类 org.eclipse.jface.databinding.viewers.ObservableListContentProvider ,具体取决于您的列表应该更改还是不更改。

这些内容提供者完全可以满足您的要求:管理表或查看器的集合输入。