在Vaadin中,HorizontalLayout为每个组件提供了所需的空间,只要有足够的空间而不是更多。
在使用BeanItemContainer创建的表中,所有列都具有相同的宽度。由于表格内容是动态加载的,每次宽度都不同,不同的PC有不同的字体大小,我们不想指定固定宽度(以像素为单位)。
我们如何判断行的行为类似于html表或HorizontalLayout,因为它为每一行提供了正确的宽度,而不是更多而不是更少?
答案 0 :(得分:3)
听起来你正在寻找扩展比例。它的工作方式类似于HorizontalLayout的扩展比率。
有关详细信息,请查看https://vaadin.com/api/com/vaadin/ui/Table.html#setColumnExpandRatio%28java.lang.Object,%20float%29。
Table oTable = new Table();
oTable.addContainerProperty("First name", String.class, null);
oTable.addContainerProperty("Last name", String.class, null);
oTable.addContainerProperty(YEAR_PROPERTY, Integer.class, null);
oTable.addItem(new Object[] { "Nicolaus","Copernicus",new Integer(1473) }, new Integer(1));
oTable.addItem(new Object[] { "Tycho", "Brahe", new Integer(1546) }, new Integer(2));
oTable.addItem(new Object[] { "Giordano","Bruno", new Integer(1548) }, new Integer(3));
oTable.addItem(new Object[] { "And this is a very very long cell", "Newton", new Integer(1643) }, new Integer(4));
oTable.setSizeFull();
oTable.setColumnExpandRatio(YEAR_PROPERTY, 1.0f);
编辑:如果您为一个单元格(例如最后一个单元格)设置expandratio,则所有其他单元格都需要占用其空间。这可能是您的要求的解决方法。
如果你注释掉最后添加的项目,你会发现第一列只占用了所需的空间。
答案 1 :(得分:3)
setColumnWidth(-1)应该激活自动缩放。虽然这通常是默认的(即使使用BeanItemContainers,所以我很惊讶你没有自动看到这种行为。 可能值得追求的一个相关概念是setSizeUndefined(),它是Sizeable接口的一种方法。
答案 2 :(得分:1)
您可以尝试使用CSS规则:
.v-table td:last-child {
margin-right:auto;
}
Chrome> = 4,Firefox> = 3.5,Opera> = 9.6,Safari> = 3.2,IE> = 9