在一個香草GWT項目去獲得這種最簡單的方法是使用佈局面板類 - 這些使用你所提到的RequiresResize
和ProvidesResize
接口。最好的方法是開始使用RootPanel
而不是RootLayoutPanel
。這個替代的起點包裝一個RootPanel
實例,並通過調用RequiresResize.onResize
(如果存在)將它的子級調整到可用的瀏覽器空間。
小部件樹的其餘部分(孩子們加入到父母,等等),那麼也應該使用這些接口來聲明,他們需要調整的信息。很有可能你最終不會建立任何不支持的小部件,而是通常將現有的小部件(通過UiBinder或Composite)包裝到一個新的小部件中 - 這就是你正在製作一個新小部件的技巧,以及默認一個不執行ProvidesResize
或RequiresResize
。當你構建你的應用程序時,有兩個基本的解決方案:
實現這兩個接口。然後,在您的onResize()
方法中,調用需要知道其大小已更改的頂級小部件的onResize()
。這允許更多的控制,但需要更明確的代碼來進行大小調整。最簡單的方法是擴展ResizeComposite
而不是Composite
。或者,
請勿擴展Widget(即不要擴展Composite
/ResizeComposite
/etc),而應實施IsWidget
。這樣可以避免在樹中添加新的Widget
類型,並將所有正在使用的小部件分組到一個恰好構建並設置它們的類型中。這是我的首選選項 - 它看起來不像一個小部件,通常更容易模擬,等等。現在,您需要有一個asWidget()
方法返回您的小部件結構的基礎 - 任何添加的東西都會直接與此對話(並直接調用它的onResize()
),讓你忽略他們需要交互的細節。這是我的首選。
感謝您的明確解釋......然而,我認爲安德烈的解決方案將爲我工作。 – hba