- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑
虽然,多亏了 Colin,网格本身的问题现在已经解决了,但是 BorderLayoutPanel
仍然在一个奇怪的(小)高度上初始化网格,而且中间边框也找不到。
--
我有一个 GWT 应用程序,它有一个 GXT 视口(viewport),其中包含一个 BorderLayoutContainer,其中又包含另一个 BorderLayoutContainer,如下所示:
现在,如果我用我的网格替换 GXT ContentPanel
,效果就很好:
但是,当我实现网格时,我感到非常惊讶:
网格突然使北组件的大小变小,它进一步隐藏在标题下方(北组件已经有 10px 的 margin-top),以及网格和 TabPanel 之间的线无法再抓取/code> 来调整视口(viewport)大小。此外,人们希望网格在这种情况下显示滚动条。此外,在折叠网格的 ContentPanel 时,中心组件不会继续填充应有的剩余空间。
当我使用 GWT 面板(DockLayoutPanel
、SplitLayoutPanel
)时,Grid
工作得很好,所以我继续将网格包装在 VerticalPanel
(在 GXT ContentPanel
内)。没有发生任何变化。
DocGrid UiBinder
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:with type="com.sencha.gxt.widget.core.client.grid.ColumnModel"
field="cm"></ui:with>
<ui:with type="com.sencha.gxt.data.shared.ListStore" field="store"></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:ContentPanel ui:field="contentPanel" height="100%" width="100%">
<row:VerticalLayoutContainer borders="false">
<row:child>
<grid:Grid ui:field="grid" cm="{cm}" store="{store}" view="{view}"
loadMask="true" columnReordering="true" borders="false"
height="500px">
</grid:Grid>
</row:child>
<row:child>
<toolbar:PagingToolBar pageSize="20" ui:field="toolBar" width="100%"></toolbar:PagingToolBar>
</row:child>
</row:VerticalLayoutContainer>
</gxt:ContentPanel>
非常感谢任何帮助或线索。
编辑
根据请求,DocGrid.java
package nl.opensatisfaction.postkamer.client.ui;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import com.google.gwt.cell.client.DateCell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiFactory;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
import com.sencha.gxt.core.client.IdentityValueProvider;
import com.sencha.gxt.core.client.Style.SelectionMode;
import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.widget.core.client.ContentPanel;
import com.sencha.gxt.widget.core.client.box.MessageBox;
import com.sencha.gxt.widget.core.client.grid.CheckBoxSelectionModel;
import com.sencha.gxt.widget.core.client.grid.ColumnConfig;
import com.sencha.gxt.widget.core.client.grid.ColumnModel;
import com.sencha.gxt.widget.core.client.grid.Grid;
import com.sencha.gxt.widget.core.client.grid.GridView;
import com.sencha.gxt.widget.core.client.grid.filters.DateFilter;
import com.sencha.gxt.widget.core.client.grid.filters.GridFilters;
import com.sencha.gxt.widget.core.client.grid.filters.StringFilter;
import com.sencha.gxt.widget.core.client.toolbar.PagingToolBar;
public class DocGrid implements IsWidget {
private static final DocumentNodeProperties props = GWT
.create(DocumentNodeProperties.class);
AlfrescoServiceAsync metadata = GWT.create(AlfrescoService.class);
interface MyUiBinder extends UiBinder<Widget, DocGrid> {
}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
@UiField
ColumnModel<DocumentNode> cm;
@UiField
ListStore<DocumentNode> store;
@UiField
Grid<DocumentNode> grid;
@UiField
GridView<DocumentNode> view;
@UiField
PagingToolBar toolBar;
@UiField
ContentPanel contentPanel;
@Override
public Widget asWidget() {
IdentityValueProvider<DocumentNode> identity = new IdentityValueProvider<DocumentNode>();
final CheckBoxSelectionModel<DocumentNode> sm = new CheckBoxSelectionModel<DocumentNode>(identity);
sm.setSelectionMode(SelectionMode.MULTI);
ColumnConfig<DocumentNode, String> nameCol = new ColumnConfig<DocumentNode, String>(
props.nodeRef(), 100, "nodeRef");
ColumnConfig<DocumentNode, String> documentIdCol = new ColumnConfig<DocumentNode, String>(
props.documentIdentificatie(), 100, "Document ID");
ColumnConfig<DocumentNode, Date> ontvangenCol = new ColumnConfig<DocumentNode, Date>(
props.documentOntvangstdatum(), 100, "Ontvangen");
ontvangenCol.setCell(new DateCell(OpenPostModule.DATE_FORMAT));
ColumnConfig<DocumentNode, Date> aanschrijfCol = new ColumnConfig<DocumentNode, Date>(
props.documentAanschrijfdatum(), 100, "Aangeschreven");
aanschrijfCol.setCell(new DateCell(OpenPostModule.DATE_FORMAT));
ColumnConfig<DocumentNode, String> doctypeCol = new ColumnConfig<DocumentNode, String>(
props.documentTypeOmschrijving(), 100, "Type");
ColumnConfig<DocumentNode, String> subjectCol = new ColumnConfig<DocumentNode, String>(
props.afzenderIdentificatie(), 100, "BSN/KVK");
ColumnConfig<DocumentNode, AlfrescoUser> behandelaarCol = new ColumnConfig<DocumentNode, AlfrescoUser>(
props.documentBehandelaar(), 100, "Behandelaar");
ColumnConfig<DocumentNode, AlfrescoObject> groepCol = new ColumnConfig<DocumentNode, AlfrescoObject>(
props.documentGroep(), 100, "Groep");
List<ColumnConfig<DocumentNode, ?>> l = new ArrayList<ColumnConfig<DocumentNode, ?>>();
l.add(sm.getColumn());
l.add(documentIdCol);
l.add(ontvangenCol);
l.add(aanschrijfCol);
l.add(doctypeCol);
l.add(subjectCol);
l.add(groepCol);
l.add(behandelaarCol);
cm = new ColumnModel<DocumentNode>(l);
store = new ListStore<DocumentNode>(props.key());
Widget component = uiBinder.createAndBindUi(this);
contentPanel.setCollapsible(true);
contentPanel.setAnimCollapse(true);
view.setAutoExpandColumn(nameCol);
grid.setSelectionModel(sm);
// Column filters
StringFilter<DocumentNode> nameFilter = new StringFilter<DocumentNode>(props.documentIdentificatie());
DateFilter<DocumentNode> dateFilter = new DateFilter<DocumentNode>(props.documentOntvangstdatum());
DateFilter<DocumentNode> dateFilter2 = new DateFilter<DocumentNode>(props.documentAanschrijfdatum());
StringFilter<DocumentNode> docTypeFilter = new StringFilter<DocumentNode>(props.documentTypeOmschrijving());
StringFilter<DocumentNode> subjectFilter = new StringFilter<DocumentNode>(props.documentTitel());
StringFilter<DocumentNode> groepFilter = new StringFilter<DocumentNode>(props.documentGroepLabel());
StringFilter<DocumentNode> behandelaarFilter = new StringFilter<DocumentNode>(props.documentBehandelaarLabel());
GridFilters<DocumentNode> filters = new GridFilters<DocumentNode>();
filters.initPlugin(grid);
filters.setLocal(true);
filters.addFilter(nameFilter);
filters.addFilter(dateFilter);
filters.addFilter(dateFilter2);
filters.addFilter(docTypeFilter);
filters.addFilter(subjectFilter);
filters.addFilter(groepFilter);
filters.addFilter(behandelaarFilter);
return component;
}
@UiFactory
ColumnModel<DocumentNode> createColumnModel() {
return cm;
}
@UiFactory
ListStore<DocumentNode> createListStore() {
return store;
}
public void fillGrid(AlfrescoUser user) {
metadata.getPoststukken(user, new AsyncCallback<ArrayList<DocumentNode>>() {
@Override
public void onSuccess(ArrayList<DocumentNode> result) {
// Sorts DocumentNode by its generatedPriority
Collections.sort(result);
store.addAll(result);
if(result.size()==0) {
new MessageBox("", "er zijn geen poststukken gevonden.").show();
}
}
@Override
public void onFailure(Throwable caught) {
if(caught instanceof CustomException) {
new MessageBox(((CustomException) caught).getTitle(), caught.getMessage()).show();
if(caught instanceof CustomException) {
// TODO: move logic to PostCenter, then act appropriately
new MessageBox("Uitgelogd", "U bent uitgelogd.");
}
}
}
});
}
public void removeDocument(String documentIdentificatie) {
for(DocumentNode doc : grid.getStore().getAll()) {
if(doc.getDocumentIdentificatie().equals(documentIdentificatie)) {
DebugClient.debug("Removing row with id " + doc.getDocumentIdentificatie(), this.getClass());
grid.getStore().remove(doc);
break;
}
}
}
public void updateRow(DocumentNode node) {
DebugClient.debug("Updating row with id " + node.getDocumentIdentificatie(), this.getClass());
grid.getStore().update(node);
}
}
编辑:BLP UiBinder
这是包含 DocGrid 的 UiBinder 代码。这是直接在 RootPanel 上的一个。
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<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>
相关的java是这样的(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));
}
}
});
最佳答案
将布局数据添加到该小部件中 VLC 内的 Grid 和 PagingToolbar。工具栏可能应该设置为 100% 宽度(即 width="1.0"
),并仅使用它需要的高度(height="-1"
),并且网格应使用所有宽度和所有高度(height="1.0"
和 `width="1.0")。这可能看起来或多或少像这样(来自 http://www.sencha.com/examples/#ExamplePlace:paginguibindergrid )
<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>
同样重要的是,支持该 xml 文件的类能够由其父级调整大小。扩展 ResizeComposite
来获取该通知,或者实现 RequiresResize
并让其调用 ContentPanel
自己的 onResize
函数,或者根本不处理Composite
,而只是实现IsWidget
,并让asWidget()
返回ContentPanel
>.
在这种情况下,您的 Java 调整大小接线是正确的。但是,如果多次调用 asWidget(),您最终将生成一个小部件的多个副本 - 确保这始终返回相同的副本,可能通过将其存储在字段中并检查它是否为空(即 createAndBind 尚未尚未被调用)。
关于java - ContentPanel 中的 GXT 网格弄乱了 BorderLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15283402/
您能否建议如何在 Bootstrap 或 IE 兼容的 CSS 网格中,在没有 CSS 网格的情况下进行以下布局。 在大屏幕中 头部,左侧堆叠的 body 和右侧覆盖头部和 body 高度的图像。 [
我想在 Objective-C 中绘制一个 15*15 的网格。格子颜色是蓝色的,就像在诺基亚制作“贪吃蛇”游戏的棋盘一样。 我试过使用 for 循环来创建 subview ,但它似乎不起作用,我查看
我正在尝试将 CSS 网格与 grid-template-columns: repeat(auto-fill, auto) 一起使用,单元格被设置为最大宽度,导致每行一个元素。 p> 是否可以让元素宽
我正在努力在网格的自定义列上添加一个指向网站的简单、简单的链接。我用了 Inchoo blog为列添加自定义渲染器,它可以工作。我认为只需修改渲染并添加标签就足够了。但我的希望破灭了,行不通。 如何做
使用 Gnuplot 我绘制了下图 - 现在,正如您在图像中看到的那样,很难在线条之间识别出其末端的块。所以我想用不同的颜色或样式交替着色网格。 我现在用来给网格着色的代码是 - set style
假设我有一个非常简单的 WPF 网格(6 行 x 6 列),定义如下:
我有一个希望绑定(bind)到 WPF 网格的集合。 我面临的问题是列数是动态的并且取决于集合。这是一个简单的模型: public interface IRows { string Messa
我正在使用 Vaadin 8,我想制作某种混淆矩阵。我想知道是否可以根据单元格位置而不是数据提供者手动填充表格/网格的值。 referenceTable.addColumn(reference ->
我在 http://jsfiddle.net/TsRJy/ 上创建了一个带有 div 框的网格. 问题 我不知道如何使 a:hover 工作。 信息 重写 HTML 代码,因为表格不适合我。 http
银光处女在这里。如何使网格周围的用户控件自动调整大小以适应内部网格宽度?目前,当浏览器窗口更宽时,用户控件的显示尺寸约为 300 或 400 像素。它在数据网格周围呈现垂直和水平滚动条,这很丑陋。我想
这个问题已经有答案了: Equal width columns in CSS Grid (11 个回答) 已关闭 2 年前。 使用 CSS Grid,当您不知道会有多少个子项时,如何将所有子项保留在一
我想使用 CSS Grid 的 grid-template-areas。 但问题是我正在使用的 CMS 添加了大量额外的包装器。有没有办法忽略额外的包装?因为它弄乱了漂亮的网格区域...... 我正在
在我的Grid中,当我单击“操作”按钮(下面的代码中显示的“删除和编辑”按钮)时,我需要弹出一个窗口,而不用警告消息提醒用户; 在下面的代码中,我正在使用HANDLER handler: button
这个问题已经有答案了: Equal width columns in CSS Grid (11 个回答) 已关闭 2 年前。 使用 CSS Grid,当您不知道会有多少个子项时,如何将所有子项保留在一
我需要模拟一个仓库,其中有几辆自动驾驶车辆在给定的布局上移动,并具有简单的优先级规则。根据我的理解,这个问题可以通过离散事件模拟(DES)轻松解决,我会使用 SimPy为了这。 我看到的问题是,我似乎
在 ASP.NET 中,我可以让用户控件在页面上的表格中占据多个单元格: 用户控件1: foo bar 第1页: 并且自动调整列宽以适应最大的用户控件。 这也可以在 WPF
我正在寻找一种方法来实时搜索我的网格+要过滤的复选框。我有一个包含学生的网格(照片和姓名)。我想要的是有一个复选框,可以过滤学生所在的不同类(class)。还有一个搜索栏,我可以在其中输入学生姓名。
我正在使用 jQuery 和 jQuery UI 构建一个 Web 应用程序。我陷入了僵局。我需要的是一个 jQuery 网格,它具有可编辑字段,并以某种方式在这些可编辑单元格之一上合并一个自动完成字
我想知道是否有其他 JavaScript 组件可以提供具有多个分组的网格表示。下面是jqGrid的截图我扩展了允许该功能,但它需要获取所有数据。我希望在扩展分组时加载数据。 另一个修改后的 jqGri
我一直在为我将在此处描述的 CSS 问题而烦恼: 在下面的示例 ( https://codesandbox.io/s/jjq4km89y5 ) 中,您可以看到一个可滚动的内容(紫色背景)和一个被左侧面
我是一名优秀的程序员,十分优秀!