Заставить Vaadin Component занять свое пространство в невидимом состоянии

В моем индикаторе Vaadin есть Метка и Индикатор Прогресса. Он динамически отображается в пользовательском интерфейсе. Под этим индикатором прогресса есть дерево.

Когда программа динамически устанавливает видимость индикатора выполнения в значение true, дерево смещается вниз, а пользовательский интерфейс дрожит из-за смещения.

Есть ли способ заставить компонент Vaadin занимать его пространство, даже если он невидим и, следовательно, когда он становится видимым, он не должен пытаться занимать пространство у других компонентов пользовательского интерфейса?

То, что я ищу, - это функция, похожая на setRendered(true) в программировании на flex и ActionScript.

Спасибо за вашу помощь.

2 ответа

Решение

Наконец я получил ответ на свой вопрос. Я просто заменил невидимые компоненты на фиктивную видимую метку без текста.

И использовал его альтернативно для переключения между видимым и невидимым.

Я задал вопрос на форуме Vaadin, и вот ответ, который я получил от Ким Леппанен:

В Vaadin 7, если вы устанавливаете видимость компонента равной false, тогда информация о компоненте вообще не отправляется в браузер - это как если бы компонент вообще не существовал в макете.

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

Второй вариант - использовать CSS. Примените атрибут css "видимость: скрытый" для компонента, который вы хотите скрыть. Обратите внимание, что компонент не является "действительно" скрытым. Допустим, это кнопка. Пользователь по-прежнему может просматривать дерево DOM и видеть кнопку в коде, изменять видимость компонента на стороне клиента (например, с помощью инструментов разработчика или firebug), а затем видеть и использовать кнопку, как если бы она была видна в макете.,

Я помещаю это здесь, потому что люди могли бы добавить некоторые более полезные ответы там. Для подробного объяснения, пожалуйста, смотрите это.

Используйте следующий пример для компонента, который вы хотите установить невидимым, но оставляя его занятым пространством:

Image home = new Image();
home.setSource(HOME);
home.addStyleName("visibility: hidden");

ИЛИ ЖЕ

home.addStyleName("visibility: collapse");
Другие вопросы по тегам