gwt Popup没有居中

时间:2010-12-20 00:57:37

标签: gwt gwt2

我使用gwt popup来显示一些消息,但它没有显示在 中央 如果我调用popup.center(),则显示事件。实际上它没有居中 只是第一次,如果我关闭它并再次打开它,每件事都可以, 但不是第一次。如何解决?

GWT.runAsync(new RunAsyncCallback() {
    @Override
    public void onSuccess() {
        Image fullImage = new Image(optionImageName);
        fullImage.setAltText("Loading image ...");
        imagePopup.setWidget(fullImage);
        imagePopup.center();
    }
});

我在http://www.devcomments.com/gwt-Popup-is-not-centered-at107182.htm上发现了这个问题,今天我也遇到了这个问题。我找到了答案,我将在此发布以供将来参考。

3 个答案:

答案 0 :(得分:2)

我发现问题是当您将弹出窗口居中时图像未加载完成。这是第一次发生,因为第二次图像以某种方式被浏览器兑现。

解决方案是将其集中在onLoad事件上。

GWT.runAsync(new RunAsyncCallback() {
    @Override
    public void onSuccess() {
        Image fullImage = new Image(optionImageName);
        fullImage.setAltText("Loading image ...");
        fullImage.addLoadHandler(new LoadHandler() {
            @Override
            public void onLoad(LoadEvent event) {
                imagePopup.center();
            }
        });
        imagePopup.setWidget(fullImage);
        imagePopup.center();
    }
});

答案 1 :(得分:1)

我也有这个问题。你必须两次调用中心的原因是因为当弹出窗口被“隐藏”时,弹出容器实际上是从DOM中删除的。这是有问题的,因为您的弹出窗口必须现在“显示”弹出窗口的内容,然后才能检查图像是否已加载。

建议实施的问题是,如果图像未缓存,则第一次调用center()将不正确。第二次呼叫中心将纠正它。在浏览器上,这会导致弹出对话框的移动(看起来非常糟糕)。

我会推荐以下内容: 1.将等待的微调器放在同一显示器中并最初显示。 2.调用loadHandler,显示图像,隐藏微调器和重新定位。

答案 2 :(得分:0)

    public void onClick(ClickEvent event) {
            // TODO Auto-generated method stub
            final ADPopup popup = new ADPopup();
            popup.setHeight("300px");
            popup.setWidth("500px");
            popup.setPopupPositionAndShow(new PopupPanel.PositionCallback() {

                public void setPosition(int offsetWidth, int offsetHeight) {
                    // TODO Auto-generated method stub
                    int left = (Window.getClientWidth() - offsetWidth) / 3;
                    int top = (Window.getClientHeight() - offsetHeight) / 3;

                    popup.setPopupPosition(left, top);
                }
            });

            popup.show();
        }

希望得到这个帮助。