我正在尝试在Eclipse页面中显示一个CheckBoxTable,它使用户能够选择许多项目中的任何一个 - 可用的项目来自EMF模型并且是枚举。
我已经正确设置了内容提供程序和标签提供程序(我认为),但我不知道使用什么来设置输入以显示枚举的完整列表。
假设我的模型有一个名为 MyEnum 的枚举,其值为 ONE、TWO 和 THREE——我希望能够将这三个枚举作为复选框显示给用户。
我需要在查看器上调用 setInput(...),但我应该传递什么来获取这些枚举?
虽然我从来没有为CheckboxTableViewer
做过,但我已经设置了一个EEnum
作为其他StructuredViewer
类的值源,如ComboViewer
。我所做的是创建一个自定义IStructuredContentProvider
,它是ArrayList
的子类,并将EEnum
作为构造函数参数(将此类称为EEnumContentProvider
)。在构造函数中,我遍历EEnum
的getELiterals()
,并调用add()
它们的每个getInstance()
值。喜欢这个:
public EEnumContentProvider(EEnum source) {
List<EEnumLiteral> literals = source.getELiterals();
for (EEnumLiteral aLiteral : literals) {
add(aLiteral.getInstance());
}
}
您可以使用返回toArray()
的结果轻松实现IStructuredContentProvider.getElements(Object)
,并且您不关心IContentProvider.setInput()
,因为内容不是基于输入,而是静态的。
然后,可以将EEnumContentProvider
实例设置为查看器的内容提供程序。
只需获取文本并将它们添加到控件中,如下所示:
/* Populate the Combo Box with the Literals */
EEnum cFEnum = Package.Literals.LITERAL_ENUMERATION;
/*
* Add an EMPTY item value so that the user can disable the specific
* feature
*/
this.cmbNames.add( EMPTY_STRING );
/*
* Add the Enumeration Literals to the
* appropriate SWT Combo widget.
*/
for (int i=0; i<cFEnum.getELiterals().size(); i++){
this.cmbNames.add( cFEnum.getEEnumLiteral( i ).toString() );
}
cFEnum = null;
String[] sortedTypes = this.cmbNames.getItems();
Arrays.sort( sortedTypes );
this.cmbNames.setItems( sortedTypes );