Gwt2 在onClickHandler中构建时,GWT弹出窗口不居中

Gwt2 在onClickHandler中构建时,GWT弹出窗口不居中,gwt2,Gwt2,我的目标是仅在需要时使用GWT.runSync加载弹出内容 如果我将我的小部件构造为: public class CreateButton extends Button { public CreateButton() { super("Create"); buildUI(); } private void buildUI() { final CreateWidget createWidget = new CreateWidget(); final Popu

我的目标是仅在需要时使用GWT.runSync加载弹出内容

如果我将我的小部件构造为:

public class CreateButton extends Button {

public CreateButton() {
    super("Create");
    buildUI();
}

private void buildUI() {

    final CreateWidget createWidget = new CreateWidget();

    final PopupPanel popupPanel = new PopupPanel(false);
    popupPanel.setWidget(createWidget);
    popupPanel.setGlassEnabled(true);
    popupPanel.setAnimationEnabled(true);
    addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            popupPanel.center();

        }
    });
}
}
然后弹出窗口将正确居中

如果我在clickHandler中构建弹出窗口:

public class CreateButton extends Button {

public CreateButton() {
    super("Create");
    buildUI();
}

private void buildUI() {

        @Override
        public void onClick(ClickEvent event) {
            final CreateWidget createWidget = new CreateWidget();

            final PopupPanel popupPanel = new PopupPanel(false);
            popupPanel.setWidget(createWidget);
            popupPanel.setGlassEnabled(true);
            popupPanel.setAnimationEnabled(true);
            addClickHandler(new ClickHandler() {

            popupPanel.center();

        }
    });

}
}
弹出窗口将无法正确居中。我尝试过使用setPositionAndShow,但是提供的偏移量是12,即使CreateWidget的宽度和高度实际上都大约是200px

我想使用第二种方法,以便最终在onClick中使用GWT.runAsync,因为CreateWidget非常复杂


我使用的GWT-2.1.1似乎通过延迟呼叫中心而起作用。也许一个一次性计时器也能起作用。在GWT.runAsync中包装buildUI时,延迟调用也有效

public class CreateButton extends Button {

    public CreateButton() {
        super("Create");
        buildUI();
    }

    private void buildUI() {

        @Override
        public void onClick(ClickEvent event) {
            final CreateWidget createWidget = new CreateWidget();

            final PopupPanel popupPanel = new PopupPanel(false);
            popupPanel.setWidget(createWidget);
            popupPanel.setGlassEnabled(true);
            popupPanel.setAnimationEnabled(true);
            addClickHandler(new ClickHandler() {

                Scheduler.get().scheduleFixedDelay(new RepeatingCommand() {

                    @Override
                    public boolean execute() {

                        popupPanel.center();
                        return false;

                    }
                }, 50); //a value greater than 50 maybe needed here.
            });    
        }
    }

}
}