Vaadin表,列宽根据内容宽度

时间:2012-03-28 10:47:49

标签: width vaadin

在Vaadin中,Horizo​​ntalLayout为每个组件提供了所需的空间,只要有足够的空间而不是更多。

在使用BeanItemContainer创建的表中,所有列都具有相同的宽度。由于表格内容是动态加载的,每次宽度都不同,不同的PC有不同的字体大小,我们不想指定固定宽度(以像素为单位)。

我们如何判断行的行为类似于html表或Horizo​​ntalLayout,因为它为每一行提供了正确的宽度,而不是更多而不是更少?

3 个答案:

答案 0 :(得分:3)

听起来你正在寻找扩展比例。它的工作方式类似于Horizo​​ntalLayout的扩展比率。

有关详细信息,请查看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