2013-05-16 2 views
8

Je travaille sur un projet dans Vaadin 7. En ce sens, j'ai besoin d'analyser tous les composants dans une mise en page et trouver un composant dont j'ai besoin.Vaadin - Itérer sur les composants dans une mise en page

enter image description here

Ce qui précède est la représentation picturale de ma mise en page.

Je crée dynamiquement la disposition verticale de couleur verte à l'intérieur de la disposition verticale de couleur bleue. Puisque je les crée dynamiquement, je ne peux avoir aucune instance pour ces choses créées dynamiquement. Mais, j'ai des identifiants uniques pour tous les composants.

Maintenant, j'ai besoin de trouver un Combobox en utilisant l'Id. Je donnais comment analyser la combobox à partir de la disposition verticale de couleur bleue. Tout ce que j'ai est une instance de la disposition verticale de couleur bleue et des Id pour combobox. Et, je peux avoir des ID pour les dispositions vertes et rouges aussi si nécessaire.

je besoin de quelque chose comme ça, mais coincé ..

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 
     } 
    } 
+0

Serait-ce une idée de vous mettre tous les composants aura besoin plus tard dans hashset et utiliser l'ID comme clé? –

Répondre

11

Vous devez vérifier le composant récursive.

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"); 

Hope it helps

+0

Homme génial. Il wroks parfaitement. – Gugan

0

Bien que l'utilisation HasComponents.iterator() est encore possible com.vaadin.ui.AbstractComponentContainer implémente java.lang.Iterable<Component>, ce qui rend l'itération un peu plus confortable:

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