2013-01-17 76 views
1

我有一個窗口resizeHandler,它工作正常。除了我只是對窗口的最終維度感興趣,換句話說,當鼠標按鈕被釋放時,我對窗口的維度感興趣。有沒有一種方法可以偵聽窗口鼠標事件?GWT onResize&mouse up

我寫了一段代碼,完成了我的目標,但我更喜歡更明顯的東西。 resizeRequestId是場:

private void processResize() { 

    final Timer timer = new Timer() { 
    final Size windowSize = getWindowDimention(); 

    final int requestId = ++resizeRequestId; 

    @Override 
     public void run() { 
      final boolean isLatestRequest = requestId == resizeRequestId; 
     if (isLatestRequest) { 
       //DO SOMETHING WITH windowSize 
      } 
     } 
    }; 
    timer.schedule(100); 
} 

回答

1

的瀏覽器不沿着發生的頁面外的事件經過,以及窗口大小調整算作頁面外。這就是說,你仍然可以得到一個掛鉤,調整整個瀏覽器窗口的動作:

Window.addResizeHandler(new ResizeHandler() { 
    public void onResize(ResizeEvent event) { 
    //get, process window resize behavior 
    } 
}); 

對於一些瀏覽器和一些調整大小,你會得到很多事件,鼠標移動,併爲他人,你會只有完整的一個。例如,在firefox中,拐角處的調整大小手柄會發送所做的每個更改,而每個側面手柄只在用戶釋放鼠標後才發送。最小化和最大化窗口也會導致一個事件。

+0

科林,大小是我自己釀...我不使用GXT。 – hba

+0

哦,所以當你說窗口,你的意思是整個瀏覽器窗口?我會相應地更新我的答案... –

+0

科林,謝謝,這正是我跟蹤我的應用程序窗口調整大小。感謝您解釋不同的瀏覽器行爲。 – hba

0

科林是對的。此外,如果您在「調整大小」(例如forceLayout)上進行大量計算,則最好添加一個計時器。通過這種方式,每隔十秒鐘就會發射一次計算結果?

final Timer resizeTimer = new Timer() { 
    @Override 
    public void run() { 
     mainPanel.forceLayout(); 
    } 
}; 
Window.addResizeHandler(new ResizeHandler() { 
    public void onResize(ResizeEvent event) { 
     int height = event.getHeight(); 
     mainPanel.setHeight(height + "px"); 
     resizeTimer.cancel(); 
     resizeTimer.schedule(100); 
    } 
}); 

就是這樣