2009-10-02 20 views
7

Ich habe einen Verbund dessen Haupt Widget hat zwei Kinder, also:Wie kann ich ein GWT-Widget in einem Panel ersetzen?

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

Einige Zeit nach dem Bau von MyComposite, ich will child1 aus tauschen, es mit einem anderen Widget, new-child1 ersetzen.

Ich könnte vielleicht child1 durch den Aufruf von panel.remove (child1) entfernen, und dann mein neues Widget hinzufügen, indem ich panel.add (new-child1); aber das würde dazu führen, dass child2 zuerst gerendert wird, oder?

Also, wie kann ich child1 durch new-child1 ersetzen, ohne die Reihenfolge der Kinder des Panels zu ändern?

Antwort

10

Versuchen Sie insert() anstelle von add().

Leider kann man insert() nicht nennen, da es geschützt ist, so müssen Sie FlowPanel verlängern:

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

funktionieren sollte.

+5

Das letzte Mal, als ich nachgesehen habe, war eine öffentliche Methode: 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 muss dann eine alte Version der Dokumente für mich zurückgeben. –

+1

War nicht öffentlich in 1.5: http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/ui/FlowPanel.html –

Verwandte Themen