如何让GXT网格占用所有可用宽度?

时间:2010-10-12 17:06:14

标签: gwt grid gxt

我在GXT中有一个网格,如下所示:

List<ColumnConfig> configs = new ArrayList<ColumnConfig>();
ColumnConfig config = new ColumnConfig();
config.setId("type");
config.setHeader("Type");
config.setWidth(50);
configs.add(config);
config = new ColumnConfig();
config.setId("text");
config.setHeader("Info");
config.setWidth(75);
configs.add(config);

columnModel = new ColumnModel(configs);
listStore = new ListStore<DtoModel>();

grid = new Grid<DtoModel>(listStore, columnModel);
grid.setAutoHeight(true);
grid.setAutoWidth(true);

VerticalPanel verticalPanel = new VerticalPanel();
verticalPanel.setLayout(new FillLayout());
verticalPanel.add(grid);

这样可以很好地创建网格,只有一个例外 - 宽度限制为列宽的总和。当我放弃列宽时,网格最终有0宽度。

有没有办法让这个网格及其列扩展以填充可用的整个区域?

修改:其中一个难点是ColumnConfig.setWidth()方法仅将int作为参数,因此我无法将“100%”指定为字符串或类似的东西。

5 个答案:

答案 0 :(得分:7)

这是做到这一点的方法:

grid.getView().setAutoFill(true);

以下是要记住的关键点:使用setAutoFill()调整列的大小时,gxt将始终调整所有其他列的大小,以便网格继续适合容器。如果没有自动填充,如果您只使用autoExpand列,如果您调整一列的大小,网格可能会比包含组件更大(或更小),在这种情况下,您必须手动调整网格大小以适应 - 这不仅是痛苦,在大多数情况下,最终用户几乎不可能。

答案 1 :(得分:5)

GridView中有一个强制所有列适合可用空间的函数。这就像为每列设置1的flex。

grid.getView().setForceFit(true);

答案 2 :(得分:3)

GXT Grid有一个名为setAutoExpandColumn()的方法,该方法将获取要占用网格中所有可用空间的列的id。我会从网格中删除setAutoHeight和setAutoWidth。

我不确定您是否尝试实现固定宽度布局或灵活布局,该布局将根据浏览器的高度/宽度进行扩展。这是我通常做的事情,因为我希望我的网格占据所有的高度和宽度并在页面上滚动。希望这会有所帮助。

- 温尼

    Viewport viewport = new Viewport();
    viewport.setLayout(new BorderLayout());

    ContentPanel center = new ContentPanel();
    center.setFrame(false);
    center.setLayout(new FitLayout());
    center.add(grid);

答案 3 :(得分:0)

您可以尝试使用css(setStyle / setColumnStyleName)设置网格/列的样式,然后可以使用100%作为宽度。

cupakob

答案 4 :(得分:-1)

现在可能为时已晚,但我尝试将网格的autoHeight和autoWidth属性设置为false,将其与设置autoExpandColumn相结合(我不需要更改默认的autoFill值)。

grid.setAutoHeight(false);
grid.setAutoWidth(false);