Как я могу установить ширину макета vaadin и при этом внутренние компоненты будут занимать столько места, сколько им нужно?

Итак, у меня есть объект VerticalLayout. Без установки высоты - внутренние компоненты выглядят нормально: каждая метка занимает как можно меньше места и остается сверху:

пример без высоты

Но если я установлю высоту макета на 400 пикселей с помощью filesLayout.setHeight("400px");, каждая из моих трех меток начнет занимать 33% пространства:

пример с высотой

Я просто хочу, чтобы мои метки занимали только необходимое количество места, а мой VerticalLayout был таким длинным, как я его установил. Пожалуйста помогите.


person John    schedule 01.06.2018    source источник
comment
должны ли все компоненты иметь одинаковый размер (т. е. не возражаете ли вы, если расширится только последний)?   -  person jhamon    schedule 01.06.2018


Ответы (1)


VerticalLayout равномерно распределяет высоты между всеми компонентами. Таким образом, с 3 компонентами вы получите 3 строки, каждая по 33% от полной высоты VerticalLayout.

Вы можете управлять коэффициентами расширения с помощью .setExpandRatio(...)

Чтобы все Labels было сверху, вам просто нужно добавить «пустой» последний элемент Labelals к VerticalLayout и указать VerticalLayout использовать всю высоту «переполнения» в этой последней строке.

Label empty= new Label();
vl.addComponent(empty);
vl.setExpandRatio(empty, 1);

Установка его в 1 означает, что он займет 1 часть высоты перелива.

Существует также этот метод быстрого сокращения, чтобы сделать оба за один вызов:

vl.addComponentsAndExpand(empty);

Это ответ на ваш вопрос, но, вероятно, вы придумаете этот вопрос:

Что делать, если содержимое VerticalLayout превышает доступную высоту? Но это другой вопрос, возможно, Panel будет лучшим контейнером, если вы хотите иметь полосы прокрутки.

person André Schild    schedule 01.06.2018
comment
Это один грязный обходной путь. Но это работает. Спасибо большое. P.S. Это setExpandRatio, а не setComponentExpandRatio. - person John; 04.06.2018
comment
Небольшое улучшение (используйте вместо кода выше): Label empty= new Label(); vl.addComponentAndExpand (пусто); - person John; 04.06.2018