如何将 EList 设置为 JFace TableViewer 中的输入?
How can I set an EList as an input in JFace TableViewer?
这是我的第一个 SO 问题。我希望我提供足够的细节。
我有一个带有名为 ScopeContainer 的 class 的 EMF 模型,它有两个不同类型的包含引用 EList
。
我已经生成了
- 型号
- model.edit
和
- model.edit或
使用 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;
}
}
这是我的第一个 SO 问题。我希望我提供足够的细节。
我有一个带有名为 ScopeContainer 的 class 的 EMF 模型,它有两个不同类型的包含引用 EList
。
我已经生成了
- 型号
- model.edit 和
- model.edit或
使用 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;
}
}