2010-11-13 3 views

Répondre

33

Laissez MyComponent implémenter l'interface HasWidgets pour ajouter/supprimer des widgets enfants.

Le MyComponent.ui.xml semble aussi simple que

<g:FlowPanel ui:field="main" /> 

pendant que vous déléguez les méthodes spécifiées ind HasWidgets au FlowPanel:

public class MyComponent extends Composite implements HasWidgets { 

    private static MyComponentUiBinder uiBinder = GWT.create(MyComponentUiBinder.class); 

    interface MyComponentUiBinder extends UiBinder<Widget, MyComponent> {} 

    @UiField 
    FlowPanel main; 

    public MyComponent() { 
     initWidget(uiBinder.createAndBindUi(this)); 
    } 

    @Override 
    public void add(Widget w) { 
     main.add(w); 
    } 

    @Override 
    public void clear() { 
     main.clear(); 
    } 

    @Override 
    public Iterator<Widget> iterator() { 
     return main.iterator(); 
    } 

    @Override 
    public boolean remove(Widget w) { 
     return main.remove(w); 
    } 
} 

Appel

<M:MyComponent> 
    <g:Label text="some text" /> 
</M:MyComponent> 

fonctionnera de cette façon.

+0

Merci beaucoup pour la réponse très complète. –

+0

Pas de problème, de rien. – z00bs

+0

J'ai cherché partout pour une manière simple de faire ceci. Merci! – roguenet

1

En utilisant ce code XML:

<myapp:mycomponent> 
    <g:Label>Decorated child</g:Label> 
</myapp:mycomponent> 

instanciera MyComponent puis appelez MyComponent.add(label). Tout ce que vous avez à faire est de remplacer .add(..) dans votre classe MyComponent et d'appliquer tous les styles que vous voulez passer des composants.

Questions connexes