在一个香草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