Gwt DeckLayoutPanel未显示在横幅下方

Gwt DeckLayoutPanel未显示在横幅下方,gwt,uibinder,Gwt,Uibinder,我有一个简单的GWT应用程序,其顶级UI由UiBinder配置,如下所示: <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> <ui:UiBinder xmlns:ui = 'urn:ui:com.google.gwt.uibinder' xmlns:g = 'urn:import:com.google.gwt.user.client.ui'> &l

我有一个简单的GWT应用程序,其顶级UI由UiBinder配置,如下所示:

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">

<ui:UiBinder xmlns:ui = 'urn:ui:com.google.gwt.uibinder'
             xmlns:g = 'urn:import:com.google.gwt.user.client.ui'>
  <g:HTMLPanel>
    <g:FlowPanel ui:field="mainApplicationWidget" styleName="main-panel">
      <g:HTMLPanel>
        <div class="banner">
          <div class="banner-text-left">
            <h3>Some H3 Text</h3>
            <h2>Some H2 Text</h2>
          </div>
        </div>
      </g:HTMLPanel>

      <g:DeckLayoutPanel ui:field="deckLayoutPanel" styleName="main-deck">
      </g:DeckLayoutPanel>
    </g:FlowPanel>
  </g:HTMLPanel>
</ui:UiBinder>
代码将此简单面板插入DeckLayoutView:

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">

<ui:UiBinder xmlns:ui = 'urn:ui:com.google.gwt.uibinder'
             xmlns:g = 'urn:import:com.google.gwt.user.client.ui'>
  <g:HTMLPanel>
    <center>
      <h1>Test Placeholder</h1>
      <g:Label ui:field="testLabel" text="Test"/>
    </center>
  </g:HTMLPanel>
</ui:UiBinder>

测试占位符

当我在devmode中运行应用程序时,我看到了横幅和两个文本字符串,但没有DeckLayoutView。如何使其显示?

您无法看到
DeckLayoutPanel
,因为它隐藏了其子项

见以下文件:

将小部件添加到DeckPanel后,将对其可见性、宽度和高度属性进行操作

简单地说,
DeckLayoutPanel
将在您添加的小部件上调用
setVisible(false)

这是因为

(…)一次只能看到一个(小部件)

您应该在
DeckLayoutPanel
实例上调用以下方法之一:

public void showWidget(int index)
public void showWidget(Widget widget)

另外,确保
甲板布局面板的高度不为0
DeckLayoutPanel
实现,这意味着它需要明确调整大小

实现此接口的小部件只应添加到实现此接口的小部件


这是我的代码:public void onModuleLoad(){GWT.setUncaughtExceptionHandler(){public void onUncaughtExceptionException(Throwable e){InfoDialog dialog=new InfoDialog(“Uncaught:+e);dialog.show();}});deckLayoutPanel.add(testPanel);deckLayoutPanel.showWidget(testPanel);RootLayoutPanel root=RootLayoutPanel.get();root.add(mainApplicationWidget);}为什么高度会是0?GWT不应该将其设置为显示TestPanel所需的任何值吗?嗯,没有办法格式化注释?我希望代码足够短,可以清晰。我已经编辑了我的答案,以包含有关
RequiresResize
接口的信息。这将解释0高度。我认为后半部分可能比前半部分更重要-HTMLPanel不是ProvidesResize,如果没有更多详细信息,我们无法判断HTMLPanel的父级是否是(而且UiBinder映射到的小部件很可能不会正确地传递调整大小的消息-除非您明确实现RequiresResize,否则IsWidget、小部件或组合不会)。我将这两个HTMLPanel都包装在SimpleLayoutPanels中,但没有乐趣。这似乎是一种非常常见的布局模式—是否有任何文档显示如何执行此操作?感谢迄今为止的帮助。
public void showWidget(int index)
public void showWidget(Widget widget)