我正在使用GXT开发一个应用程序,我正在使用gxt网格小部件。但我有布局问题,我的网格“内容”不适合我的ContentPanel(尤其是高度)。以下是问题的屏幕截图。
这是我的代码:
public abstract class GenericEditableGrid<M> extends Grid<M> {
private final VerticalLayoutContainer gridContainer = new VerticalLayoutContainer();
private final ContentPanel pane = new ContentPanel();
public GenericEditableGrid(String gridTitle, ListStore<M> listStore, ColumnModel<M> cm) {
super(listStore, cm);
pane.setHeadingText(gridTitle);
pane.setHeight(150);
this.getSelectionModel().setSelectionMode(Style.SelectionMode.SINGLE);
this.getView().setAutoFill(true);
this.getView().setAdjustForHScroll(true);
this.setBorders(false);
gridContainer.add(toolBar);
// --------------- EDITED --------------- //
// This is where I add my grid. I think the problem is here.
// There should be a VerticalLayoutData here but there is an exception
// thrown if I add the LayoutData
gridContainer.add(this/*, new VerticalLayoutData(1,1)*/);
pane.add(gridContainer);
}
@Override
public Widget asWidget() {
return pane.asWidget();
}
}
当我使用我的网格时,我这样做:
requiredFields.add(creationTime.asWidget(), new VerticalLayoutData(1, 1, new Margins(0, 0, 10, 0)));
我尝试了很多东西,包括使用setHeight(“auto”),addStyleName和自定义css,setAutoFill(),setAdjustForHScroll(),...还试图按照另一个SO线程中的建议添加this.getView().setForceFit(true);
。
但我仍然无法解决它。
以下是抛出的异常:
com.google.gwt.core.client.JavaScriptException: (HierarchyRequestError) @com.google.gwt.user.client.impl.DOMImplStandard::insertChild(Lcom/google/gwt/user/client/Element;Lcom/google/gwt/user/client/Element;I)([JavaScript object(1450), JavaScript object(1428), int: 0]): Failed to execute 'insertBefore' on 'Node': The new child element contains the parent.
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:2)
正如其他人已经说过的那样 - 它不是网格问题。这是一个容器问题。检查将Grid添加到VerticalLayoutContainer的位置。此方法应如下所示:
verticalLayoutContainer.add(grid, new VerticalLayoutContainer(1, 1));
第二个参数给出了可用的全宽和高度。如果这不起作用,则必须检查父容器。例如:如果您的VerticalLayoutContainer的宽度= 100px,那么您的网格不会变得更大,即使您给它全高(因为此处为full = 100px)。在这种情况下,您必须为VerticalLayoutContainer提供更多空间:
verticalLayoutContainerParent.add(verticalLayoutContainer, new VerticalLayoutContainer(1, 1));
如果您正在使用BorderLayoutContainer,请将网格放在中心中 - 这会自动为网格提供全宽和高度。
答案 1 :(得分:1)
getView().setForceFit(true);
只有强制适合列。 - getView()
对象中的所有方法仅适用于网格中的视图。
你在什么样的面板上放置网格? - 并非所有面板都允许自动调整大小。尝试将网格放入BorderLayoutContainer
的中心(通过使用'setCenterWidget(GRID)'
答案 2 :(得分:0)
通常,当您希望网格适合其容器时,容器的布局必须是“FitLayout”类型。
使用此布局,当您向容器添加单个窗口小部件时,窗口小部件将尝试适合整个容器。