2009-10-02 69 views
7

我有一個組合,其主要部件有兩個孩子,這樣的:如何更換面板中的GWT小部件?

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

一些時間建設MyComposite後,我想交換child1出來,與其他小部件,新child1替換它。我可以通過調用panel.remove(child1)來移除child1,然後通過調用panel.add(new-child1)來添加我的新窗口小部件;但這會導致child2首先被渲染,不是嗎?

那麼,如何在不更改面板的子項順序的情況下將child1替換爲new-child1?

回答

10

嘗試insert()而不是add()

不幸的是,你不能稱之爲insert()因爲它保護的,所以你需要擴展FlowPanel

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

應該工作。

+5

上次我查看插入是一種公共方法: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 2009-10-02 14:30:48

+0

嗯...那麼Google肯定已經爲我返回了舊版本的文檔。 – 2009-10-02 16:07:44

+1

在1.5版本中沒有公開:http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/user/client/ui/FlowPanel.html – 2009-10-02 16:09:00