我试图在 Eclipse 页面中显示一个 CheckBoxTable,它使用户能够选择多个项目中的任何一个 - 可用的项目来自 EMF 模型并且是枚举。
我已经正确设置了内容提供程序和标签提供程序(我认为),但我无法确定使用什么来设置输入以显示完整的枚举列表。
因此,假设我的模型有一个名为 MyEnum 的枚举,其值为 ONE、TWO 和 THREE - 我希望能够将所有这三个枚举作为复选框显示给用户。
我需要在查看器上调用 setInput(...) 但是我应该传递什么来获取这些枚举?
我试图在 Eclipse 页面中显示一个 CheckBoxTable,它使用户能够选择多个项目中的任何一个 - 可用的项目来自 EMF 模型并且是枚举。
我已经正确设置了内容提供程序和标签提供程序(我认为),但我无法确定使用什么来设置输入以显示完整的枚举列表。
因此,假设我的模型有一个名为 MyEnum 的枚举,其值为 ONE、TWO 和 THREE - 我希望能够将所有这三个枚举作为复选框显示给用户。
我需要在查看器上调用 setInput(...) 但是我应该传递什么来获取这些枚举?
虽然我从未为 a 做过,但我已将 aCheckboxTableViewer
设置EEnum
为其他StructuredViewer
类(如ComboViewer
. 我所做的是创建一个自定义IStructuredContentProvider
,它是的子类ArrayList
并将其EEnum
作为构造函数参数(调用此类EEnumContentProvider
)。在构造函数中,我遍历EEnum
'sgetELiterals()
并调用add()
它们的每个getInstance()
值。像这样:
public EEnumContentProvider(EEnum source) {
List<EEnumLiteral> literals = source.getELiterals();
for (EEnumLiteral aLiteral : literals) {
add(aLiteral.getInstance());
}
}
IStructuredContentProvider.getElements(Object)
您可以通过使用返回结果轻松实现toArray()
并且您不关心,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 );