0

我试图在 Eclipse 页面中显示一个 CheckBoxTable,它使用户能够选择多个项目中的任何一个 - 可用的项目来自 EMF 模型并且是枚举。

我已经正确设置了内容提供程序和标签提供程序(我认为),但我无法确定使用什么来设置输入以显示完整的枚举列表。

因此,假设我的模型有一个名为 MyEnum 的枚举,其值为 ONE、TWO 和 THREE - 我希望能够将所有这三个枚举作为复选框显示给用户。

我需要在查看器上调用 setInput(...) 但是我应该传递什么来获取这些枚举?

4

2 回答 2

0

虽然我从未为 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为查看器的内容提供者。

于 2012-06-19T15:24:26.673 回答
0

只需获取文字并将它们添加到控件中,如下所示:

/* 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 );    
于 2012-09-07T08:20:30.343 回答