GXT网格不适合面板

时间:2014-07-28 15:38:59

标签: gwt layout grid gxt

我正在使用GXT开发一个应用程序,我正在使用gxt网格小部件。但我有布局问题,我的网格“内容”不适合我的ContentPanel(尤其是高度)。以下是问题的屏幕截图。

enter image description here grid layout problem, it does not fit panel

这是我的代码:

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.

任何人都可以帮我解决这个问题吗?

3 个答案:

答案 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”类型。

使用此布局,当您向容器添加单个窗口小部件时,窗口小部件将尝试适合整个容器。