ScrollPanel中的GWT TabLayoutPanel

时间:2015-12-18 00:22:25

标签: java gwt gwt-tablayoutpanel

我正在努力理解他们在2.0中引入的GWT布局系统。据说这是推荐的,但旧的方式似乎要复杂得多。

我想做的事情(我觉得这是一个非常基本的设计)是构建一个带有标题,左侧垂直菜单,页脚和滚动内容部分的应用程序。

所以,要做到这一点,你可以这样做:

DockLayoutPanel panel = new DockLayoutPanel();

FlowPanel header = new FlowPanel();
FlowPanel menu = new FlowPanel();
FlowPanel footer = new FlowPanel();

ScrollPanel content = new ScrollPanel();

panel.addNorth(header);
panel.addWest(menu);
panel.addSouth(footer);

panel.add(content);

RootLayoutPanel.get().add(panel);

完美无缺。除此之外,ScrollPanel(所有内容都在其中)显然会破坏布局流程。所以,在我的活动中,我有:

@Override
public void start(AcceptsOneWidget panel, EventBus eventBus)
{
    FlowPanel viewPanel = new FlowPanel();

    panel.add(viewPanel);
}

如果我将一个TabLayoutPanel添加到viewPanel,它将无法正确显示。我必须将它添加到LayoutPanel,该LayoutPanel附加到LayoutPanel,该LayoutPanel连接到LayoutPanel等,一直到RootLayoutPanel。

所以,我试试这个:

@Override
public void start(AcceptsOneWidget panel, EventBus eventBus)
{
    LayouPanel viewPanel = new LayoutPanel();

    panel.add(viewPanel);
}

在我的ui:binder中,我有:

<g:LayoutPanel>
    <g:layer>
        <g:TabLayoutPanel barHeight="3.33" barUnit="EM" height="500px">
            <!-- tabs go here -->
        </g:TabLayoutPanel>
    </g:layer>
</g:LayoutPanel>

这里有两件事。

  1. 我不想设置高度。我希望选项卡面板与内容一样大。我不明白为什么你必须在这种“更好”的方法中设置应用程序。

  2. 它根本不会显示在屏幕上。我假设因为它被附加到ScrollPanel。令我困惑的是ScrollPanel确实实现了RequiresSize和ProvideResize,所以它不是一个有效的LayoutPanel吗?这就是所有LayoutPanel的确如此。它是一个实现这些接口的ComplexPanel

  3. 当我检查页面,并将鼠标悬停在TabLayoutPanel所在的位置时,我得到一个蓝色突出显示(在Chrome中)就好像它在那里一样,但似乎

    <g:layer> 
    

    包装它没有高度,所以它隐藏了TabLayoutPanel。实际上,如果我在查看器中编辑它以获得高度,则TabLayoutPanel会显示。

    我在这里做了一些根本错误的事吗?我非常想做:

    RootLayoutPanel&gt; DockLayoutPanel&gt; ScrollPanel&gt; *某些容器&gt; TabLayoutPanel

    对于那些只是......工作的事情。我正在尝试将我当前的应用程序转换为这个新的布局,以摆脱引擎盖下生成的所有表格,但它似乎导致了更多问题而不是它修复。

    *此容器包含选项卡面板上方和下方的内容

1 个答案:

答案 0 :(得分:0)

您建议的布局中的ScrollPanel将占用DockLayoutPanel为其提供的空间。如果“Some Container”永远不会大于分配给ScrollPanel的空间,则ScrollPanel将永远不会滚动。如果“Some Container”可能变得更大(即需要滚动),则此容器无法从ScrollPanel获取其大小 - 其高度应该是显式设置,或者应该是随内容增长的常规FlowPanel。在这两种情况下,这个“Some Container”将无法为其子级提供任何大小,包括TabLayoutPanel。

很难在没有看到要求的情况下提供建议,但是如果你需要在一个随自己的内容增长的面板中包含一个TabLayoutPanel,你必须自己设置它的高度 - 在代码或CSS中。