5

我有一个记录列表,每条记录都有一个打开设置窗口的按钮。我也有很多逻辑部分的偏好,每个部分都有一些带有按钮的记录。

因此,当我单击一个按钮时,会出现对话框窗口,但如果此按钮位于页面底部的某个位置(让它成为 300 条记录和按钮),我的对话框窗口就会出现在顶部。结果,我必须向上滚动才能找到这个窗口(有时它出现在浏览器边框后面)。

或者只是想象你配置了一些东西并向下滚动页面填充每个选项,最后你保存了你的配置,但有些字段填写不正确,并出现警告弹出窗口......在页面上的某个地方,但不在你的指针附近,甚至不在当前页面的中间。

我所有的对话框窗口都是从 DialogBox 继承的,所以我使用 super.show() 和 super.center(),但它并没有按我的意愿工作。

小信息补充:一些对话窗口从服务器接收数据,当接收到所有数据时,显示窗口的其余部分。我怀疑这有时会导致窗口出现在错误的位置。

4

3 回答 3

6

你是对的,在对话框居中后编辑对话框的内容会导致它看起来不居中。为了解决这个问题,我在加载内容后调用了中心。您可以同时显示加载微调器或其他东西。

在某些情况下,您添加的小部件的大小无法立即计算。不幸的是,我发现处理这个问题的最好方法是添加小部件然后运行

Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
    public void execute() {
        dialogBox.center();
    }
});  

(未经检查的代码)

这最终变得如此普遍,以至于我添加了一个调用scheduleCenter到我的 DialogBox 类的方法。

您也可以多次呼叫中心 - 每次都将重新运行中心计算。这会引起一些抽搐。如果您不想要任何晃动,那么您必须明确设置内部小部件的大小:

DialogBox dialogBox = new DialogBox();
dialogBox.add(myWidgetWhichWillLoadDataLater);
myWidgetWhichWillLoadDataLater.addStyleName(styleNameWhichSetsSizeExplicitly)
dialogBox.center();

您也可以调用 myWidgetWhichWillLoadDataLater.setHeight("300px") 等。

于 2013-01-09T13:29:40.037 回答
1
DialogBox box = new DialogBox();
RootLayoutPanel.get().add(box);
RootLayoutPanel.get().setWidgetBottomHeight(box, 0, null, 0, null);
box.center();
box.show();

setWidgetBottomHeight() 方法来精确定位。

于 2013-01-09T09:39:41.733 回答
0
DialogBox box = new DialogBox();
//Populate the box
box.center()
于 2013-01-09T12:10:39.327 回答