2013-07-23 237 views
0

在GWT 2.3.0上使用GXT 2.2.5进行开发。当浏览器窗口调整大小时调整GXT窗口大小

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

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相应地调整大小?

谢谢。

+0

你有视? – willome

回答

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

     } 
    }; 

注: 你不能这样做event.getWindo w()为ResizeEvent你需要以另一种方式处理。

其实我倾向于做一个类似的构造函数:

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

      } 
     }; 
+0

这不起作用,因为它不是被调整大小的窗口,而是浏览器。调整浏览器大小不会自动调整显示窗口的大小。 – NestorDRod

+0

看到我的修订。这应该可以肯定。我搬到了gxt3,所以不记得确切的代码......也许你需要沉没和事件,或者你需要调整容器大小......上面修改后的代码通过调整容器大小在gxt3中适用于我。 – user1258245

+0

那么,它在GXT 2.2.5中不起作用。再说一次,我没有调整显示的窗口的大小,我调整了浏览器的大小,并且不会触发窗口的Resize事件。我可以尝试下载一个事件,但我不知道要使用哪个GWT事件。 – NestorDRod