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

问题描述 投票:3回答:3

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

我已经生成了

  • 模型
  • 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?

java swt jface rcp emf
3个回答
3
投票

一个简单的解决方案是覆盖AdapterFactoryContentProvider.getElements()以返回Filter元素的数组(从EList<Filter>输入派生)。


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

0
投票

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

这些内容提供商完全按照您的要求执行:管理表或查看器的集合输入。

© www.soinside.com 2019 - 2024. All rights reserved.