2009-10-02 11 views
7

Ho un composito la cui widget di principale ha due figli, in tal modo:Come posso sostituire un widget GWT in un pannello?

public MyComposite() { 
    child1 = new FlowPanel(); 
    child1.getElement().setId("child1"); 

    child2 = new FlowPanel(); 
    child2.getElement().setId("child2"); 

    panel = new FlowPanel(); 
    panel.add(child1); 
    panel.add(child2); 
    initWidget(panel); 
} 

Qualche tempo dopo la costruzione della MyComposite, voglio scambiare child1 fuori, sostituendolo con un altro widget, nuova-child1.

Potrei forse rimuovere child1 chiamando panel.remove (child1), e quindi aggiungere il mio nuovo widget chiamando panel.add (new-child1); ma questo farebbe sì che child2 sia reso per primo, no?

Quindi, come posso sostituire child1 con new-child1 senza modificare l'ordine dei figli del pannello?

risposta

10

Provare insert() anziché add().

Purtroppo, non si può chiamare insert() poiché è protetta, quindi è necessario estendere FlowPanel:

public class UsefulFlowPanel extends FlowPanel { 
    public void add (int index, Widget child) { 
     insert (child, getElement(), index, true); 
    } 
} 

dovrebbe funzionare.

+5

L'ultima volta che ho guardato l'inserimento era un metodo pubblico: http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/user/client/ui/FlowPanel.html#insert % 28com.google.gwt.user.client.ui.Widget,% 20int% 29 – topchef

+0

Hmm ... Google deve aver restituito una versione precedente dei documenti per me, quindi. –

+1

Non era pubblico in 1.5: http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/ui/FlowPanel.html –

Problemi correlati