Java ContentPanel中的GXT网格弄乱了边框布局

Java ContentPanel中的GXT网格弄乱了边框布局,java,gwt,gxt,uibinder,docklayoutpanel,Java,Gwt,Gxt,Uibinder,Docklayoutpanel,编辑 尽管多亏了Colin,网格本身的问题现在已经解决,但是BorderLayoutPanel仍然在一个奇怪(小)的高度上初始化网格,而中间的边界却找不到 -- 我有一个GWT应用程序,它有一个GXT视口,其中包含一个BorderLayoutContainer,其中包含另一个BorderLayoutContainer,如下所示: 现在,如果我将网格替换为GXTContentPanel,这就可以了: 然而,当我实现网格时,我感到不愉快的惊讶: 网格突然将North组件的大小变小,它进一步隐藏

编辑

尽管多亏了Colin,网格本身的问题现在已经解决,但是
BorderLayoutPanel
仍然在一个奇怪(小)的高度上初始化网格,而中间的边界却找不到

--

我有一个GWT应用程序,它有一个GXT视口,其中包含一个BorderLayoutContainer,其中包含另一个BorderLayoutContainer,如下所示:

现在,如果我将网格替换为GXT
ContentPanel
,这就可以了:

然而,当我实现网格时,我感到不愉快的惊讶:

网格突然将North组件的大小变小,它进一步隐藏在标题下(North组件已经有10px的页边距顶部),网格和
TabPanel
之间的线再也不能用来调整视口的大小。此外,在这种情况下,人们希望网格显示滚动条。此外,在折叠网格的ContentPanel时,中心组件不会继续填充剩余空间

当我使用GWT面板(
DockLayoutPanel
SplitLayoutPanel
)时,
Grid
工作得很好,所以我继续在一个
垂直面板
(在GXT
ContentPanel
中)中包装网格。没有发生任何变化

DocGrid UiBinder

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

编辑:BLP UiBinder

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
这是包含DocGrid的UiBinder代码。这是直接在根面板上的一个



.重要{
字体大小:粗体;
}
相关java是这样的(UiBinder类的构造函数):

initWidget(uiBinder.createAndBindUi(this));
osHeader.setMenuLabel(this.user.getLabel());
fillGrid(用户);
//Docgrid选择处理程序
docGrid.grid.getSelectionModel().addSelectionChangedHandler(新的SelectionChangedHandler(){
@凌驾
更改选择时的公共无效(SelectionChangedEvent事件){
List selected=event.getSelection();
如果(已选择.size()>0){
已选择文档(已选择。获取(0));
}
}
}); 

将布局数据添加到该小部件中VLC内的网格和分页工具栏中。工具栏可能应该设置为100%宽度(即
width=“1.0”
),并且只使用它需要的高度(
height=“-1”
),网格应该使用所有宽度和所有高度(
height=“1.0”
和`width=“1.0”)。这可能看起来或多或少像这样(来自)


同样重要的是,支持该xml文件的类能够被其父级调整大小。要么扩展
ResizeComposite
以获得该通知,要么实现
RequiresResize
,并让它调用
ContentPanel
自己的
onResize
函数,要么根本不处理
Composite
,只需实现
IsWidget
,并拥有
asWidget()
返回
内容面板


在本例中,您已经获得了正确的Java resize连接。但是,如果多次调用asWidget(),您将生成一个小部件的多个副本-请确保它始终返回同一个副本,方法可能是将其存储在字段中并检查其是否为null(即createAndBind尚未被调用)。

请共享该uibinder文件附带的Java。我希望这不是必需的,添加。谢谢,问题更新-布局问题应该在xml中,java在这方面看起来不错,但是我注意到了另一个潜在的错误。谢谢!添加layoutData至少给了我一个正常的网格(带有滚动条),并使工具栏可见。我改变了我的
asWidget()
方法,如您所说返回
contentPanel
,但没有效果。网格之外的问题仍然存在。如果没有更多信息,很难判断-如果BorderLayoutContainer有问题,您可能应该发布相关代码。调试屏幕截图很困难;)。我早上醒来的时候也这么想。补充!
<ui:style>
    .important {
        font-weight: bold;
    }
</ui:style>

<ui:with type="com.sencha.gxt.core.client.util.Margins" field="zeroMargins">
    <ui:attributes top="0" right="0" bottom="0" left="0" />
</ui:with>
<ui:with type="com.sencha.gxt.core.client.util.Margins" field="correctionMargins">
    <ui:attributes top="10" right="0" bottom="0" left="0" />
</ui:with>

<ui:with
    type="com.sencha.gxt.widget.core.client.container.BorderLayoutContainer.BorderLayoutData"
    field="northData">
    <ui:attributes size="35" collapsible="false" split="false"
        margins="{zeroMargins}" />
</ui:with>
<ui:with
    type="com.sencha.gxt.widget.core.client.container.BorderLayoutContainer.BorderLayoutData"
    field="southData">
    <ui:attributes size="20" collapsible="false" split="false"
        margins="{zeroMargins}" />
</ui:with>
<ui:with
    type="com.sencha.gxt.widget.core.client.container.BorderLayoutContainer.BorderLayoutData"
    field="innerWestData">
    <ui:attributes size="600" collapsible="true" split="true"
        margins="{zeroMargins}" />
</ui:with>
<ui:with
    type="com.sencha.gxt.widget.core.client.container.BorderLayoutContainer.BorderLayoutData"
    field="gridContainerData">
    <ui:attributes size="500" collapsible="true" split="true"
        margins="{correctionMargins}" />
</ui:with>


<container:Viewport>
    <container:BorderLayoutContainer
        ui:field="dockPanel">
        <container:north layoutData="{northData}">
            <os:Header ui:field="osHeader" />
        </container:north>

        <container:west layoutData="{innerWestData}">

            <container:BorderLayoutContainer
                ui:field="innerSplitPanel">
                <container:north layoutData="{gridContainerData}">
                    <os:DocGrid ui:field="docGrid" />
                </container:north>
                <container:center>
                    <os:MetaTabPanel ui:field="metaTabs"></os:MetaTabPanel>
                    <!-- <gxt:ContentPanel /> -->
                </container:center>
            </container:BorderLayoutContainer>

            <!-- <g:SplitLayoutPanel ui:field="innerSplitPanel"> <g:north size="500"> 
                <os:DocGrid ui:field="docGrid" /> </g:north> <g:center> <os:MetaTabPanel 
                ui:field="metaTabs" /> </g:center> </g:SplitLayoutPanel> -->

        </container:west>

        <container:center>
            <g:Frame ui:field="viewport" width="100%" height="100%"
                styleName="pdfPanel" />
        </container:center>

        <container:south layoutData="{southData}">
            <container:HtmlLayoutContainer
                ui:field="footer" />
        </container:south>
    </container:BorderLayoutContainer>
</container:Viewport>

</ui:UiBinder>
    initWidget(uiBinder.createAndBindUi(this));

    osHeader.setMenuLabel(this.user.getLabel());

    docGrid.fillGrid(user);

    // Docgrid selection handler
    docGrid.grid.getSelectionModel().addSelectionChangedHandler(new SelectionChangedHandler<DocumentNode>() {

        @Override
        public void onSelectionChanged(SelectionChangedEvent<DocumentNode> event) {
            List<DocumentNode> selected = event.getSelection();
            if (selected.size()>0) {
                documentSelected(selected.get(0));
            }
        }
    }); 
<ui:with type="com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData" field="middleData">
  <ui:attributes width="1" height="1" />
</ui:with>

<ui:with type="com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData" field="bottomData">
  <ui:attributes width="1" height="-1" />
</ui:with>

<ui:with type="com.sencha.gxt.widget.core.client.grid.GridView" field="view">
  <ui:attributes stripeRows="true" forceFit="true"></ui:attributes>
</ui:with>

<gxt:FramedPanel ui:field="panel" headingText="Grid UiBinder Example" pixelSize="600, 300"
  collapsible="true" addStyleNames="margin-10">
  <row:VerticalLayoutContainer borders="true">
    <row:child layoutData="{middleData}">
      <grid:Grid ui:field="grid" cm="{cm}" store="{store}" view="{view}" loadMask="true" columnReordering="true"
        borders="false">
      </grid:Grid>

    </row:child>
    <row:child layoutData="{bottomData}">
      <toolbar:PagingToolBar pageSize="50" ui:field="toolBar"></toolbar:PagingToolBar>
    </row:child>
  </row:VerticalLayoutContainer>
</gxt:FramedPanel>