这是我的第一个问题。我希望我提供足够的细节。
我有一个名为ScopeContainer的EMF模型,它有两个包含引用作为不同类型的EList
s。
我已经生成了
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?
一个简单的解决方案是覆盖AdapterFactoryContentProvider.getElements()
以返回Filter
元素的数组(从EList<Filter>
输入派生)。
正如我所建议的那样,我覆盖了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;
}
}
您应该检查类org.eclipse.jface.viewers.ArrayContentProvider或类org.eclipse.jface.databinding.viewers.ObservableListContentProvider,具体取决于您的列表是否应该更改。
这些内容提供商完全按照您的要求执行:管理表或查看器的集合输入。