4

我使用 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上找到了这个问题,今天我也遇到了这个问题。我找到了答案,我将在此处发布以供将来参考。

4

3 回答 3

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();
    }
});
于 2010-12-20T01:05:16.480 回答
1

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

推荐的实现的问题是,如果图像没有被缓存,对 center() 的第一次调用将被错误地完成。第二次呼叫中心将纠正它。在浏览器上,这会导致弹出对话框发生变化(看起来很糟糕)。

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

于 2011-01-08T09:09:49.743 回答
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();
        }

希望这个帮助。

于 2012-02-15T15:38:39.473 回答