2009-10-02 15 views
7

Tengo un compuesto cuyo principal widget tiene dos hijos, por lo tanto:¿Cómo puedo reemplazar un widget de GWT en un panel?

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

Algún tiempo después de la construcción de MyComposite, quiero intercambiar child1 cabo, sustituyéndolo por otro widget, nuevo-child1.

Podría quizás eliminar child1 llamando a panel.remove (child1), y luego agregar mi nuevo widget llamando a panel.add (new-child1); pero esto causaría que child2 se renderice primero, ¿no?

Entonces, ¿cómo puedo reemplazar child1 con new-child1 sin cambiar el orden de los elementos secundarios del panel?

Respuesta

10

Pruebe insert() en lugar de add().

Por desgracia, no se puede llamar insert() ya que está protegida, por lo que necesita para extender FlowPanel:

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

debería funcionar.

+5

La última vez que miré insertar era un método público: 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 debe haber devuelto una versión anterior de los documentos para mí, entonces. –

+1

No era público en 1.5: http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/ui/FlowPanel.html –

Cuestiones relacionadas