San*_*gli 6 java eclipse swt jface tableviewer
我一直想知道为什么我们需要 JFace TableViewers 的 ContentProviders?我知道ContentProvider类的getElements()方法将返回与表上的行相对应的对象数组或集合,当我们在表上时将调用 getElements 。但我的问题会更具体..setInput(input)
getElements 返回一个数组或对象集合,相反,我可以编写自己的方法来返回一个对象数组,然后在表查看器的实例上执行 setInput ,对吗?
有人可以就我们为什么需要 ContentProviders 给我一个不太技术但简短而令人满意的答案吗?如果没有 ContentProviders,如果我尝试在表上设置输入,那么什么也不会显示......所以当谈到 JFace 时,ContentProvider 和 LabelProvider 是必须的......
要使 JFace(表)查看器正常工作,ContentProvider 和 LabelProvider 是必不可少的。
创建查看器时,LabelProvider已设置默认 LabelProvider( 的实例)。此实现用于toString()获取元素的文本表示。
需要显式设置 ContentProvider。它用于从应用程序域模型转换为查看器模型。在 的情况下TableViewer,查看器期望应该显示的元素的平面数组。每个元素代表 TableViewer 的一行。
如果您的域模型已经使用数组或集合,您可以使用预定义的ArrayContentProvider.
例如,要显示Persons列表,您可以像这样配置查看器:
Person[] persons = ...
viewer.setContentProvider( ArrayContentProvider.getInstance() );
viewer.setInput( persons );
Run Code Online (Sandbox Code Playgroud)
假设人员被保存在一个PersonRegistry您宁愿使用能够从注册表中提取人员的自定义 ContentProvider 配置查看器:
PersonRegistry registry = ...
viewer.setContentProvider( new PersonContentProvider() );
viewer.setInput( registry );
class PersonContentProvider implements IStructuredContentProvider {
PersonRegistry registry;
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
this.registry = ( PersonRegistry )newInput;
}
public Object[] getElements(Object inputElement) {
return registry.getPersons();
}
...
}
Run Code Online (Sandbox Code Playgroud)
最后,setInput()旨在提供应用程序模型。inputChanged()ContentProvider的方法必须能够处理传递给 的内容setInput()。另请注意,setInput()必须仅在设置内容提供程序后调用,否则将引发异常。
| 归档时间: |
|
| 查看次数: |
1819 次 |
| 最近记录: |