0

在 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();
  }
};

当它很好地打开时,它管理窗口大小以适应浏览器。

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

我有什么方法可以强制窗口保持在浏览器的边界内,或者捕获调整大小事件,以便我可以告诉窗口相应地调整大小?

谢谢。

4

1 回答 1

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());

            }
        };
于 2013-07-24T12:41:00.253 回答