是否有一个`AcceptsOneWidget`,它也是`ProvideResze`(除了`ScrollPanel`)?

时间:2011-02-28 14:22:54

标签: gwt gwt2

我有一个扩展ResizeComposite并以DockLayoutPanel为根的复合词。我可以直接将其粘贴到RootLayoutPanel中,因为DockLayoutPanel ProvidesResize可以使用。

但是,我想在GWT 2.2中使用MVP工具,RootLayoutPanel无法传递给ActivityManager#setDiplay(AcceptsOneWidget)(因为它是一个多小部件容器)。

乍一看,ScrollPanel似乎符合实施AcceptsOneWidget以及ProvidesResizeRequiresResize的双重要求。

但我发现当我将我的小部件放入ScrollPanel时,它的“零大小”,我必须手动调整大小才能看到它,而且我很难知道给它的大小。我宁愿一个不一定滚动的小组。

2 个答案:

答案 0 :(得分:3)

GWT 2.3中将有SimpleLayoutPanel,描述为:

  

A simple panel that {@link ProvidesResize} to its one child.

答案 1 :(得分:2)

您可以通过自己实现来为任何小部件添加ProvidesResize,这相对简单 - 您只需将所有调整大小通知传递给RequiresResize的每个子子。

或者,如果您只是希望面板占用所有可用空间,可以尝试将ScrollPanel上的宽度和高度设置为"100%"

最后,这是我对AcceptsOneWidget

的LayoutPanel的实现
public class PanelForView extends LayoutPanel implements AcceptsOneWidget
{
    IsWidget myWidget = null;

    @Override
    public void setWidget(IsWidget w)
    {
        if (myWidget != w)
        {
            if (myWidget != null)
            {
                remove(myWidget);
            }

            if (w != null)
            {
                add(w);
            }

            myWidget = w;
        }
    }

}

我已经在我的商业应用程序中使用它几个月没有任何问题,并且可以轻松地将视图交换进去。您可以自己使用此代码。