我正在努力理解他们在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>
这里有两件事。
我不想设置高度。我希望选项卡面板与内容一样大。我不明白为什么你必须在这种“更好”的方法中设置应用程序。
它根本不会显示在屏幕上。我假设因为它被附加到ScrollPanel。令我困惑的是ScrollPanel确实实现了RequiresSize和ProvideResize,所以它不是一个有效的LayoutPanel吗?这就是所有LayoutPanel的确如此。它是一个实现这些接口的ComplexPanel
当我检查页面,并将鼠标悬停在TabLayoutPanel所在的位置时,我得到一个蓝色突出显示(在Chrome中)就好像它在那里一样,但似乎
<g:layer>
包装它没有高度,所以它隐藏了TabLayoutPanel。实际上,如果我在查看器中编辑它以获得高度,则TabLayoutPanel会显示。
我在这里做了一些根本错误的事吗?我非常想做:
RootLayoutPanel&gt; DockLayoutPanel&gt; ScrollPanel&gt; *某些容器&gt; TabLayoutPanel
对于那些只是......工作的事情。我正在尝试将我当前的应用程序转换为这个新的布局,以摆脱引擎盖下生成的所有表格,但它似乎导致了更多问题而不是它修复。
*此容器包含选项卡面板上方和下方的内容
答案 0 :(得分:0)
您建议的布局中的ScrollPanel将占用DockLayoutPanel为其提供的空间。如果“Some Container”永远不会大于分配给ScrollPanel的空间,则ScrollPanel将永远不会滚动。如果“Some Container”可能变得更大(即需要滚动),则此容器无法从ScrollPanel获取其大小 - 其高度应该是显式设置,或者应该是随内容增长的常规FlowPanel。在这两种情况下,这个“Some Container”将无法为其子级提供任何大小,包括TabLayoutPanel。
很难在没有看到要求的情况下提供建议,但是如果你需要在一个随自己的内容增长的面板中包含一个TabLayoutPanel,你必须自己设置它的高度 - 在代码或CSS中。