【问题标题】:How to center a popup/dialog window in GWT?如何在 GWT 中居中弹出/对话框窗口?
【发布时间】:2013-01-09 09:17:14
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: java gwt


【解决方案1】:

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

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

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") 等。

【讨论】:

    【解决方案2】:
    DialogBox box = new DialogBox();
    RootLayoutPanel.get().add(box);
    RootLayoutPanel.get().setWidgetBottomHeight(box, 0, null, 0, null);
    box.center();
    box.show();
    

    setWidgetBottomHeight() 方法来精确定位。

    【讨论】:

    • 永远不要将DialogBox 添加到面板中,除非您真的知道自己在做什么。在 99.999% 的情况下,这是一个错误。另外,如果您拨打center(),则无需拨打show()。
    • 嗯,我在演出前打电话给中心时,根本没有出现任何对话框。我想我必须和表演和中心一起玩,嗯。
    • @Dipak:我会试试的。但是我有一个问题,事先,对于从服务器接收数据并根据该数据构建对话窗口的其余部分的情况,这是否可以正常工作?
    • @Dragon : 你的意思是这种场景:: 向文本框输入一些东西-> 在服务器端处理该值-> 根据服务器的结果显示一条消息 ::: 我认为可以解决了。根据服务器的响应添加组件到对话框。
    • @Dipak 奇怪,但我的按钮对这种对话框中心和显示没有反应。我会分享一些代码,但我不知道应该显示哪一部分代码,因为它太复杂(深度继承),无法举个简短的例子并显示“此处显示对话框”。
    【解决方案3】:
    DialogBox box = new DialogBox();
    //Populate the box
    box.center()
    

    【讨论】:

    • 这篇文章被自动标记为低质量,因为它只是代码。您介意通过添加一些文本来解释它如何解决问题来扩展它吗?
    • @gung 你去 :)
    • 你的评论没有解释box.center(),代码没有编译。
    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 2015-05-04
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    相关资源
    最近更新 更多