2012-03-28 4 views
3

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

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

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

ответ

1

Вы можете попробовать это только с CSS Rule:

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

Chrome> = 4, Firefox> = 3.5, Opera> = 9,6, Safari> = 3,2, IE> = 9

+0

К сожалению, я больше не использую Vaadin, поэтому я не могу проверить себя, если этот ответ верен, если вы предоставите мне скриншот, чтобы доказать, что он работает, я его приму. –

+0

Я бы хотел, но это конфиденциальные данные. Может быть, еще один канал для связи? –

+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); 

Edit: если вы установите expandratio для одной ячейки (например, последний) все остальные просто взять их пространство, необходимое. Это может быть обходным путем для вашего требования.

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

+0

расширяемой отношение не исправить проблема, к сожалению. Коэффициент расширения дает объект больше пространства, чем ему действительно нужно, но я хочу, чтобы он имел только минимальный минимум (но не менее). –

+0

Я добавил пример в свой предыдущий пост. – nexus

+0

С версией Vaadin 6.7.2 расширение ration 1.0f просто занимает все пространство. Другие столбцы не могут быть изменены. Мы хотим, чтобы столбцы расширялись, чтобы их значения полностью отображались. –

3

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

Смежные вопросы