Таблица Ваадина с шириной столбцов в зависимости от ширины содержимого - PullRequest
3 голосов
/ 28 марта 2012

В Vaadin объект HorizontalLayout предоставляет каждому компоненту именно то пространство, которое ему необходимо, если его достаточно и не больше.

Однако в таблице, созданной с помощью BeanItemContainer, все столбцы имеют одинаковую ширину,Поскольку содержимое таблицы загружается динамически, ширина каждый раз различается, и на разных компьютерах размер шрифта различен, мы не хотим указывать фиксированную ширину в пикселях.

Как мы можем сказать, что строка ведет себя какHTML-таблица или HorizontalLayout в том смысле, что она дает каждой строке правильную ширину, не больше и не меньше?

Ответы [ 3 ]

3 голосов
/ 23 апреля 2013

setColumnWidth (-1) должен активировать автоматическое масштабирование. Хотя обычно это значение по умолчанию (даже с BeanItemContainers, поэтому я удивлен, что вы не видите такого поведения автоматически. Связанная концепция, возможно, заслуживающая вашего внимания, это setSizeUndefined (), который является методом интерфейса Sizeable.

3 голосов
/ 30 марта 2012

Мне кажется, что вы ищете коэффициент расширения.Это работает как коэффициент расширения 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);

Редактировать: если вы установите коэффициент расширения для одной ячейки (дляпример последний) все остальные просто занимают необходимое им место.Это может быть обходной путь для вашего требования.

Если вы закомментируете последний добавленный элемент, вы увидите, что первый столбец занимает только необходимое пространство.

1 голос
/ 11 февраля 2016

Вы можете попробовать это только с помощью CSS-правила:

.v-table td:last-child {
    margin-right:auto;
}

Chrome> = 4, Firefox> = 3.5, Opera> = 9.6, Safari> = 3.2, IE> = 9

...