视图大小与GWT MVP和SmartGWT中的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

我是GWT新手,在视图实现方面有问题。。。我使用MVP和SmartGWT。我将通过定义如何解决我的MVP和它的奇怪之处来揭示这一点

在我的onModule中,我定义了用UIbinder构建的类。我声明了一个LayoutPanel,并在类的构造函数中这样设置它

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;
 }