2013-07-23 292 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