Layout Vaadin-迭代布局中的组件

Layout Vaadin-迭代布局中的组件,layout,dynamic,iterator,components,vaadin,Layout,Dynamic,Iterator,Components,Vaadin,我在瓦丁7号做一个项目。在这种情况下,我需要分析布局中的所有组件,并找到我需要的组件 以上是我的布局的图示 我正在动态创建蓝色垂直布局中的绿色垂直布局。因为我是动态创建它们的,所以我不能为这些动态创建的东西提供任何实例。但是,我对所有组件都有唯一的ID 现在我需要找到一个使用Id的组合框。我不知道如何从蓝色垂直布局解析到组合框 我所拥有的只是一个蓝色垂直布局的实例和combobox的Id。 而且,如果需要的话,我也可以有绿色和红色布局的ID 我需要这样的东西,但是卡住了 Iterator<

我在瓦丁7号做一个项目。在这种情况下,我需要分析布局中的所有组件,并找到我需要的组件

以上是我的布局的图示

我正在动态创建蓝色垂直布局中的绿色垂直布局。因为我是动态创建它们的,所以我不能为这些动态创建的东西提供任何实例。但是,我对所有组件都有唯一的ID

现在我需要找到一个使用Id的组合框。我不知道如何从蓝色垂直布局解析到组合框

我所拥有的只是一个蓝色垂直布局的实例和combobox的Id。 而且,如果需要的话,我也可以有绿色和红色布局的ID

我需要这样的东西,但是卡住了

Iterator<Component> iterate = blueMainLayout.iterator();
Combobox cb;
while (iterate.hasNext()) {
Component c = (Component) iterate.next();
cb = (Combobox) blueMainLayout.....;
        if (cb.getId().equals(something.getId())) {
            // do my job
        }
    }
Iterator iterate=blueMainLayout.Iterator();
组合框cb;
while(iterate.hasNext()){
组件c=(组件)iterate.next();
cb=(组合框)BlueMain布局。。。。。;
如果(cb.getId().equals(something.getId())){
//做我的工作
}
}

您必须递归地检查组件

class FindComponent {
    public Component findById(HasComponents root, String id) {
        System.out.println("findById called on " + root);

        Iterator<Component> iterate = root.iterator();
        while (iterate.hasNext()) {
            Component c = iterate.next();
            if (id.equals(c.getId())) {
                return c;
            }
            if (c instanceof HasComponents) {
                Component cc = findById((HasComponents) c, id);
                if (cc != null)
                    return cc;
            }
        }

        return null;
    }
}

FindComponent fc = new FindComponent();
Component myComponent = fc.findById(blueMainLayout, "azerty");
类FindComponent{
公共组件findById(HasComponents根,字符串id){
System.out.println(“在“+root”上调用findById);
迭代器iterate=root.Iterator();
while(iterate.hasNext()){
组件c=iterate.next();
if(id.equals(c.getId())){
返回c;
}
if(HASSComponents的c实例){
组件cc=findById((HasComponents)c,id);
如果(cc!=null)
返回cc;
}
}
返回null;
}
}
FindComponent fc=新的FindComponent();
组件myComponent=fc.findById(blueMainLayout,“azerty”);

希望它有帮助

尽管使用
HasComponents.iterator()
仍然可能实现
java.lang.Iterable
,这使迭代更加舒适:

  ...
  for ( Component c : layout ) {
    if ( id.equals( c.getId() ) ) {
      return c;
    }
  }
  ...  

将稍后需要的所有组件都放在hashset中,并使用ID作为键,这是一个好主意吗?