0

我正在努力理解他们在 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 等一直到 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 和 ProvidesResize,所以它不是有效的 LayoutPanel 吗?这就是 LayoutPanel 所做的一切。它是一个实现这些接口的 ComplexPanel

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

<g:layer> 

包装它没有高度,所以它隐藏了 TabLayoutPanel。事实上,如果我在查看器中将其编辑为具有高度,则 TabLayoutPanel 会显示。

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

RootLayoutPanel > DockLayoutPanel > ScrollPanel > *Some Container > TabLayoutPanel

为了让事情……工作。我正在尝试将我当前的应用程序转换为这种新的布局内容,以摆脱在后台生成的所有表,但它似乎导致的问题多于它所修复的问题。

*此容器在选项卡面板上方和下方都有东西

4

1 回答 1

0

ScrollPanel in your proposed layout will occupy space given to it by DockLayoutPanel. If "Some Container" is never larger than space allocated to ScrollPanel, ScrollPanel will never scroll. If "Some Container" may become larger (i.e. the need for scrolling), then this container cannot get its size from ScrollPanel - its height should either be set explicitly, or it should be a regular FlowPanel which grows with its content. In both of these cases, this "Some Container" will not be able to provide any size to its children, including TabLayoutPanel.

It's hard to give advice without seeing the requirements, but if you need to include a TabLayoutPanel inside a panel that grows with its own content, you must set its height yourself - in code or CSS.

于 2015-12-18T00:43:44.283 回答