如何替换Panel中的GWT小部件?

Dav*_*vid 7 gwt dom

我有一个Composite,其主要部件有两个子节点,因此:

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);
}
Run Code Online (Sandbox Code Playgroud)

构建MyComposite后的一段时间,我想将child1交换出来,将其替换为另一个小部件new-child1.

我可以通过调用panel.remove(child1)删除child1,然后通过调用panel.add(new-child1)添加我的新小部件; 但这会导致child2首先渲染,不是吗?

那么,如何在不改变面板子项顺序的情况下将child1替换为new-child1?

Aar*_*lla 10

尝试insert()而不是add().

不幸的是,你不能打电话,insert()因为它受到保护,所以你需要扩展FlowPanel:

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

应该管用.

  • 上次我看过insert是一种公共方法: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% (5认同)