Java ContentPanel中的GXT网格弄乱了边框布局
编辑 尽管多亏了Colin,网格本身的问题现在已经解决,但是Java ContentPanel中的GXT网格弄乱了边框布局,java,gwt,gxt,uibinder,docklayoutpanel,Java,Gwt,Gxt,Uibinder,Docklayoutpanel,编辑 尽管多亏了Colin,网格本身的问题现在已经解决,但是BorderLayoutPanel仍然在一个奇怪(小)的高度上初始化网格,而中间的边界却找不到 -- 我有一个GWT应用程序,它有一个GXT视口,其中包含一个BorderLayoutContainer,其中包含另一个BorderLayoutContainer,如下所示: 现在,如果我将网格替换为GXTContentPanel,这就可以了: 然而,当我实现网格时,我感到不愉快的惊讶: 网格突然将North组件的大小变小,它进一步隐藏
BorderLayoutPanel
仍然在一个奇怪(小)的高度上初始化网格,而中间的边界却找不到
--
我有一个GWT应用程序,它有一个GXT视口,其中包含一个BorderLayoutContainer,其中包含另一个BorderLayoutContainer,如下所示:
现在,如果我将网格替换为GXTContentPanel
,这就可以了:
然而,当我实现网格时,我感到不愉快的惊讶:
网格突然将North组件的大小变小,它进一步隐藏在标题下(North组件已经有10px的页边距顶部),网格和TabPanel
之间的线再也不能用来调整视口的大小。此外,在这种情况下,人们希望网格显示滚动条。此外,在折叠网格的ContentPanel时,中心组件不会继续填充剩余空间
当我使用GWT面板(DockLayoutPanel
,SplitLayoutPanel
)时,Grid
工作得很好,所以我继续在一个垂直面板
(在GXTContentPanel
中)中包装网格。没有发生任何变化
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>