我在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%”指定为字符串或类似的东西。
答案 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);