我有一个记录列表,每个记录都有一个打开设置窗口的按钮。此外,我有许多逻辑部分的首选项,每个部分都有一些带按钮的记录。
因此,当我点击一个按钮时,会出现一个对话框窗口,但是如果这个按钮位于页面底部的某个位置(让它成为带按钮的300条记录),我的对话框窗口会出现在顶部。因此,我必须向上滚动才能找到此窗口(有时它出现在浏览器边框后面)。
或者只是想象你配置了一些东西并向下滚动页面填充每个选项,最后你保存了你的配置但是一些字段填写不正确并且警告弹出窗口出现......在页面的某个地方,但不在你的指针附近甚至不在当前页面的中间。
我的所有对话框窗口都是从DialogBox继承而来的,所以我使用的是super.show()和super.center(),但它不能按我的意愿工作。
小信息添加:一些对话框窗口从服务器接收数据,当收到所有数据时,将显示窗口的其余部分。我怀疑这可能会导致窗口出现在错误的地方。
答案 0 :(得分:6)
你是对的,在对话框居中后编辑对话框的内容将导致它显示为未中止。为了解决这个问题,我在加载内容后调用了center。您可以在此期间显示加载微调器或其他内容。
在某些情况下,无法立即计算您添加的窗口小部件的大小。不幸的是,我发现处理这个问题的最好方法是添加小部件,然后运行
Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
public void execute() {
dialogBox.center();
}
});
(未经检查的代码)
这最终变得非常普遍,我在DialogBox类中添加了一个名为scheduleCenter
的方法。
您也可以多次呼叫中心 - 每次都会重新进行居中计算。这会导致一点点抽搐。如果你不想要任何抽搐,那么你必须明确地设置内部小部件的大小:
DialogBox dialogBox = new DialogBox();
dialogBox.add(myWidgetWhichWillLoadDataLater);
myWidgetWhichWillLoadDataLater.addStyleName(styleNameWhichSetsSizeExplicitly)
dialogBox.center();
您也可以调用myWidgetWhichWillLoadDataLater.setHeight(“300px”)等。
答案 1 :(得分:1)
DialogBox box = new DialogBox();
RootLayoutPanel.get().add(box);
RootLayoutPanel.get().setWidgetBottomHeight(box, 0, null, 0, null);
box.center();
box.show();
setWidgetBottomHeight()方法准确定位。
答案 2 :(得分:0)
DialogBox box = new DialogBox();
//Populate the box
box.center()