在复选框表中显示 EMF 模型的所有枚举



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

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

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

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

虽然我从来没有为CheckboxTableViewer做过,但我已经设置了一个EEnum作为其他StructuredViewer类的值源,如ComboViewer。我所做的是创建一个自定义IStructuredContentProvider,它是ArrayList的子类,并将EEnum作为构造函数参数(将此类称为EEnumContentProvider)。在构造函数中,我遍历EEnumgetELiterals(),并调用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 );    

相关内容

  • 没有找到相关文章

最新更新