如何在Vaadin中迭代ComboBox?

why*_*ent 2 java containers combobox vaadin

我正在与Vaadin合作,我在使用ComboBox中的选择时遇到了一些麻烦.我的对象看起来像:

class MyObject{
    private String text;
    private Integer i;
    public MyObject(String text,Integer i){
        this.text = text;
        this.i = i;
    }
    public String toString(){
        return text;
    }
    //Getters and setters omitted
}
Run Code Online (Sandbox Code Playgroud)

我将它添加到框中,如下所示:

MyObject o1 = new MyObject("o1",23);
MyObject o2 = new MyObject("o2",44);
ComboBox box=new ComboBox();
box.addItem(o1);
box.addItem(o2);
Run Code Online (Sandbox Code Playgroud)

当我想获取所选数据时,这非常有用:

MyObject o3 = (MyObject)box.getValue();
Run Code Online (Sandbox Code Playgroud)

但现在我需要遍历ComboBox中的选项,我不知道如何.我似乎需要某种ID,但我不知道如何使用它.我尝试了以下但没有成功,但它不起作用(并且真的很难看):

Collection IDs = box.getItemIds();
Iterator it = IDs.iterator();
while(it.hasNext()){
    Object id = it.next();
    Item item = IDs.getItem(id);
    //What to do now?
}
Run Code Online (Sandbox Code Playgroud)

我想保持我的对象简单,避免使用bean和复杂的容器.Vaadins的例子主要是针对String的,这对我没有多大帮助.我真的很感激任何帮助.

Cha*_*ony 5

如果查看ComboBoxjavadoc,您会看到addItem方法实际上是在AbstractSelect类上定义的,它实际上将itemId作为参数.(这又被委托给Select的容器,在这个默认情况下是一个IndexedContainer)

因此,Collection IDs=box.getItemIds();将返回MyObject的集合 - 即你实际上是在追求什么.