这是我的第一个SO问题。希望我提供足够的细节。
我有一个带有ScopeContainer类的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>
时,表为空。
我该怎么做才能将TableViewer的输入设置为EList?
答案 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 ,具体取决于您的列表应该更改还是不更改。
这些内容提供者完全可以满足您的要求:管理表或查看器的集合输入。