Вкладки
Вы реплицируете функциональность, уже встроенную в виджеты Vaadin * и Tab . Не нужно заново изобретать колесо здесь. Кроме того, вы будете вводить пользователя в заблуждение, имея кнопки, которые действуют как вкладки, просто переключаясь между панелями содержимого в окне.
Вкладки имеют функции, которые вы можетезапрашивается:
- Переключение панелей содержимого в окне
- Прокрутка, если их слишком много, чтобы поместиться на экране
- Внешний вид можно настроить с помощью Vaadin themes ( Lumo & Материал ) и CSS. (См. Примеры внизу этой страницы .)
- Вкладки можно добавлять и удалять. Вы также можете отключить вкладку, чтобы она была блеклой, но все еще читаемой, пока она не активна.
Чтобы переключить контент, просто спрячьте или покажите, позвонив по номеру setVisible
. Скрытие с помощью CSS очень быстро. И setVisible
в false также отключает обновления компонента Vaadin с сервера Vaadin, так что вы можете обновлять скрытый контент (если это необходимо) без дополнительных затрат на обновление браузера.
Вкладки со страницами этой страницы examples дают хороший пример кода для управления переключением контента. A Map
отслеживает отношение каждой вкладки к ее содержимому. Метод слушателя внизу переключает контент, скрывая и показывая. Скопировано здесь:
Tab tab1 = new Tab("Tab one");
Div page1 = new Div();
page1.setText("Page#1");
Tab tab2 = new Tab("Tab two");
Div page2 = new Div();
page2.setText("Page#2");
page2.setVisible(false);
Tab tab3 = new Tab("Tab three");
Div page3 = new Div();
page3.setText("Page#3");
page3.setVisible(false);
Map<Tab, Component> tabsToPages = new HashMap<>();
tabsToPages.put(tab1, page1);
tabsToPages.put(tab2, page2);
tabsToPages.put(tab3, page3);
Tabs tabs = new Tabs(tab1, tab2, tab3);
Div pages = new Div(page1, page2, page3);
Set<Component> pagesShown = Stream.of(page1)
.collect(Collectors.toSet());
tabs.addSelectedChangeListener(event -> {
pagesShown.forEach(page -> page.setVisible(false));
pagesShown.clear();
Component selectedPage = tabsToPages.get(tabs.getSelectedTab());
selectedPage.setVisible(true);
pagesShown.add(selectedPage);
});
PagedTabs
widget
Как видно из приведенного выше фрагмента кода, виджеты Tabs
& Tab
в комплекте с Vaadin фактически не переключают содержимое. Эти виджеты - это просто минимум для (а) отображения себя на экране в соответствии с темой и (б) знания, когда на них нажимали.
К счастью, Алехандро Дуарте создал оболочку для виджета Tabs
& Tab
. постраничные вкладки описаны в Vaadin Directory . Вы можете скачать или установить через Maven. Продукт бесплатный и с открытым исходным кодом (Apache License 2).
С PagedTabs
вы передаете контент при добавлении каждой вкладки. Этот контент автоматически переставляется при переходе между вкладками. Вам не нужно отслеживать, какой контент принадлежит какой вкладке. И вам не нужно показывать / скрывать контент. Виджет включает в себя методы для добавления или удаления вкладок, а также удаления соответствующего содержимого. Действительно, этот виджет поддерживает наличие элемента управления «Закрыть» для удаления вкладки.
К сожалению, я не могу заставить этот PagedTabs
виджет ограничивать себяна ширину окна браузера. Элемент прокрутки никогда не появляется в панели вкладок. Вместо этого пользователь должен прокрутить всю веб-страницу вправо, чтобы получить доступ к дополнительным вкладкам. Я подал Issue # 11 .
Этот проект PagedTabs
, безусловно, хорошая идея и выглядит многообещающе. Проверьте это, возможно, эта проблема будет исправлена, или, возможно, вы можете найти обходной путь.