2009-10-02 17 views
7

mam kompozyt, którego głównym widget ma dwoje dzieci, a więc:Jak mogę zamienić widżet GWT w panelu?

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

Jakiś czas po wybudowaniu MyComposite, chcę zamienić child1 się, zastępując go innym widget, new-child1.

Mogę prawdopodobnie usunąć child1, wywołując panel.remove (child1), a następnie dodaj mój nowy widżet, wywołując panel.add (new-child1); ale to spowodowałoby, że child2 zostanie uczyniony jako pierwszy, prawda?

Jak więc zastąpić dziecko 1 nowym dzieckiem 1 bez zmiany kolejności dzieci w panelu?

Odpowiedz

10

Wypróbuj insert() zamiast add().

Niestety, nie można nazwać insert() ponieważ jest chroniony, więc trzeba rozszerzyć FlowPanel:

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

powinno działać.

+5

Ostatnim razem, gdy patrzyłem na wstawkę, była metoda publiczna: 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 musiało dla mnie zwrócić starą wersję moich dokumentów. –

+1

Nie był publiczny w wersji 1.5: http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/ui/FlowPanel.html –

Powiązane problemy