浏览器窗口调整大小时调整GXT窗口大小

时间:2013-07-23 21:43:30

标签: gxt

在GWT 2.3.0上使用GXT 2.2.5开发。

我正在处理的应用程序显示带有自动滚动条的可调整大小的窗口。我想确保窗口大小不超过它显示的浏览器窗口的大小。为此,我添加了以下代码:

addWindowListener(new WindowListener()
{
  public void windowActivate(WindowEvent we)
  {
    super.windowActivate();
    Window window = we.getWindow();
    window.layout(true);
    int width = window.getWidth();
    int height = window.getHeight();
    int maxWidth = XDOM.getViewportWidth();
    int maxHeight = XDOM.getViewportHeight();
    window.setSize(Math.min(width, maxWidth), Math.min(height, maxHeight));
    window.center();
  }
};

这可以管理窗口的大小,以便在打开窗口时非常适合浏览器。

我的问题是,如果用户随后调整浏览器窗口的大小,则打开的窗口不会调整并最终被裁剪。

有没有办法让我强制Window停留在浏览器的边界内,或者捕获resize事件以便我可以告诉Window相应地调整大小?

感谢。

1 个答案:

答案 0 :(得分:0)

您需要将侦听器(实际处理程序 - 已弃用的侦听器)添加到浏览器窗口。

因此,如果您在不同时间显示几个不同的窗口,所有窗口都需要使用窗口调整大小,则需要为每个窗口设置一个监听器,并在显示窗口时将其添加到浏览器窗口。

要将监听器添加到浏览器窗口,请使用:

com.google.gwt.user.client.Window.addResizeHandler(handler);

例如,调整ContentPanel cp:

的大小
com.google.gwt.event.logical.shared.ResizeHandler handler = new ResizeHandler() {

        @Override public void onResize(com.google.gwt.event.logical.shared.ResizeEvent event) {

            cp.setWidth(event.getWidth());
            cp.setHeight(event.getHeight());

        }
    };

那么如果您切换到新视图或ContentPanel,则需要注册...

com.google.gwt.user.client.Window.addResizeHandler(handler2);

    com.google.gwt.event.logical.shared.ResizeHandler handler2 = new ResizeHandler() {

        @Override public void onResize(com.google.gwt.event.logical.shared.ResizeEvent event) {

            cp2.setWidth(event.getWidth());
            cp2.setHeight(event.getHeight());

        }
    };

注意: 你不能为你需要处理另一种方式的ResizeEvent做event.getWindow()。

实际上我倾向于在类似的构造函数中执行此操作:

    com.google.gwt.event.logical.shared.ResizeHandler handler2;

     public MyDialog(){
     handler2 = new ResizeHandler() {

            @Override public void onResize(com.google.gwt.event.logical.shared.ResizeEvent event) {

                 setWidth(event.getWidth());
                 setHeight(event.getHeight());

            }
        };