视图大小与GWT MVP和SmartGWT中的layoutPanel容器不匹配
我是GWT新手,在视图实现方面有问题。。。我使用MVP和SmartGWT。我将通过定义如何解决我的MVP和它的奇怪之处来揭示这一点 在我的onModule中,我定义了用UIbinder构建的类。我声明了一个LayoutPanel,并在类的构造函数中这样设置它视图大小与GWT MVP和SmartGWT中的layoutPanel容器不匹配,gwt,mvp,smartgwt,Gwt,Mvp,Smartgwt,我是GWT新手,在视图实现方面有问题。。。我使用MVP和SmartGWT。我将通过定义如何解决我的MVP和它的奇怪之处来揭示这一点 在我的onModule中,我定义了用UIbinder构建的类。我声明了一个LayoutPanel,并在类的构造函数中这样设置它 layoutPanel = binder.createAndBindUi(this); 我在这个类中有一个容器: public void setBodyLayout() { panel.setWidgetLeftWidth(menuPan
layoutPanel = binder.createAndBindUi(this);
我在这个类中有一个容器:
public void setBodyLayout() {
panel.setWidgetLeftWidth(menuPanel, xx, PCT, xxx, PCT);
panel.setWidgetRightWidth(bodyPanel, xx, PCT, xx, PCT);
}
menuPanel和bodyPanel都是在上面的类中声明的simplePanel(UIfield与UIbinder一起使用)。在布局面板中有两个。对于ActivityMapper的方法显示,我有这个方法(实际上我有两个ActivityMapper,两个类似下面的方法和两个容器,用于菜单和正文)
在我的onModule中,我这样声明了我的ActivityMapper
BodyActivityMapper bodyContainerActivityMapper = new BodyActivityMapper(clientFactory);
ActivityManager bodyContainerActivityManager = new ActivityManager(bodyContainerActivityMapper, eventBus);
bodyContainerActivityManager.setDisplay(my_class_described_above.getBodyContainer());
MenuActivityMapper也做了同样的工作
最后
RootLayoutPanel.get().add(my_class_described_above.getLayoutPanel());
当getLayoutPanel()返回我在上面声明的类中声明的layoutPanel时
因此,每个区域都有自己的ActivityMapper。菜单的ActivityMapper只有一个活动,“ActivityMapperBody”有几个由菜单触发的活动
容器的用途是解决我的布局不同的“行动”。我用它定义了区域,以便接收以活动开始的视图
但此配置仅适用于使用UIbinder构建的视图。。。在每个视图中,我声明一个布局,并按如下方式返回它
public Widget asWidget() {
return my_layout_declared;
}
当我返回布局时,没有任何效果。我真的不明白为什么,我觉得smartgwt更糟糕。我想要的只是检索我的布局并将其放入我的容器中。。。使用smartgwt可以节省大量时间
我已经详细说明了我的问题,以确保所有人都理解。问你Chris Lercher你的帖子是否能帮我
感谢阅读中提到的解决方案:
如果您绝对必须在GWT容器中放置一个智能GWT接口,并且希望它
填充容器时,最好的方法是侦听窗口级别的调整大小事件并运行
您自己的布局计算,最终在最顶级的智能GWT上调用resizeTo()
小部件
然而,这样说是错误的
…GWT容器在调整大小时[不]触发事件
(自2009年12月8日发布的GWT 2.0以来的“新”面板)确实如此(请参阅ProvidesResize和RequiresResize接口)。因此,如果您有这样一个面板作为MVP主体容器(如果其父级也是LayoutPanels直到top RootLayoutPanel),那么您也可以覆盖主体容器的onResize()
方法,而不是侦听窗口调整大小事件
那么你如何解决你的具体问题呢
您需要在最顶层的智能GWT布局上调用resizeTo(宽度、高度)
- 当您放入(新)智能GWT布局时,例如,当位置发生变化时,您可能会放入一个新布局
- 当窗口调整大小时,或者当发生其他改变容器大小的事情时(或者,如果使用布局面板,则可以使用其onResize())
resizeTo(width,height)
调用,您必须通过询问周围的容器来确定宽度和高度,例如使用
container.getElement().getClientWidth()
很难将SmartGWT与其他GWT小部件混合在一起,这是因为SmartGWT呈现其小部件和布局的特殊方式。请注意,与上述FAQ中的声明相反,其他GWT小部件库通常没有这个问题。那么我的选择是什么呢?放弃smartgwt?我所需要的只是将一个组合或任何使用smartgwt小部件构建的东西发送到SimplePanel。但似乎只有UIBinder才是合适的方式。有没有人能在SimplePanel中添加smartgwt小部件而不出现奇怪行为的解决方案?谢谢,这是完美的匹配!!
public Widget asWidget() {
return my_layout_declared;
}