如何在GWT中居中弹出/对话框窗口?

Dra*_*gon 5 java gwt

我有一个记录列表,每个记录都有一个打开设置窗口的按钮.此外,我有很多逻辑部分的首选项,每个部分都有一些带按钮的记录.

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

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

我的所有对话框窗口都是从DialogBox继承而来的,所以我使用的是super.show()和super.center(),但它并不像我想要的那样工作.

小信息添加:一些对话框窗口从服务器接收数据,当收到所有数据时,将显示窗口的其余部分.我怀疑这可能会导致窗口出现在错误的地方.

Ril*_*ark 6

你是对的,在对话框居中后编辑对话框的内容将导致它显示为未中止.为了解决这个问题,我在加载内容后调用了center.您可以在此期间显示加载微调器或其他内容.

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

Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
    public void execute() {
        dialogBox.center();
    }
});  
Run Code Online (Sandbox Code Playgroud)

(未经检查的代码)

这最终变得非常普遍,我添加了一个调用scheduleCenter我的DialogBox类的方法.

您也可以多次呼叫中心 - 每次都会重新进行居中计算.这会导致一点点抽搐.如果你不想要任何抽搐,那么你必须明确地设置内部小部件的大小:

DialogBox dialogBox = new DialogBox();
dialogBox.add(myWidgetWhichWillLoadDataLater);
myWidgetWhichWillLoadDataLater.addStyleName(styleNameWhichSetsSizeExplicitly)
dialogBox.center();
Run Code Online (Sandbox Code Playgroud)

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