我正在尝试创建一个填充ContentPanel
宽度的网格。网格应该有两列大小相等的列,这些列跨越网格的整个宽度。调整浏览器窗口大小应相应地更新网格大小。我希望下面的代码可以实现这一点,但是网格不会在浏览器调整大小时增长,并且第二列和网格的右边缘之间存在~15px
间隙。
有什么想法吗?
public class MyGrid extends ContentPanel {
@Override
protected void onRender(Element parent, int index) {
super.onRender(parent, index);
setLayout(new FillLayout());
ColumnConfig c1 = new ColumnConfig("value","value", 50);
ColumnConfig c2 = new ColumnConfig("value1","value1", 50);
ListStore<ModelData> store = new ListStore<ModelData>();
for (int i=0; i<10; i++) {
BaseModelData data = new BaseModelData();
data.set("value", "value");
data.set("value1", "value1");
store.add(data);
}
Grid<ModelData> grid = new Grid<ModelData>(store, new ColumnModel(Arrays.asList(new ColumnConfig[] {c1, c2})));
grid.setAutoHeight(true);
grid.setAutoWidth(true);
grid.getView().setAutoFill(true);
add(grid);
}
}
答案 0 :(得分:1)
桌子右侧额外空间的原因是grid.setAutoHeight()
。删除它,它将消失。使用浏览器调整表格大小似乎需要使用Viewport
(我不明白为什么ContentPanel
会在没有上面代码中的网格的情况下增长。这段代码完成了我想要做的事情:
public class MyGrid extends Viewport {
@Override
protected void onRender(Element parent, int index) {
super.onRender(parent, index);
setLayout(new FitLayout());
ColumnConfig c1 = new ColumnConfig("value","value", 50);
ColumnConfig c2 = new ColumnConfig("value1","value1", 50);
ListStore<ModelData> store = new ListStore<ModelData>();
for (int i=0; i<10; i++) {
BaseModelData data = new BaseModelData();
data.set("value", "value");
data.set("value1", "value1");
store.add(data);
}
final Grid<ModelData> grid = new Grid<ModelData>(store, new ColumnModel(Arrays.asList(new ColumnConfig[] {c1, c2})));
grid.getView().setAutoFill(true);
ContentPanel panel = new ContentPanel();
panel.setLayout(new FitLayout());
panel.add(grid);
add(panel);
}
}
答案 1 :(得分:0)
你试过这个吗?
grid.getView().setForceFit(true);
网格适合其容器。另外你真的应该使用容器的其他布局来使内部元素适合容器(FitLayout,BorderLayout,RowLayout是可以接受的)