This addon extends the Vaadin 10 Tabs with a few additional features. This features may deprecate in future if the core provides similar functions.
The extension allows you to set a list of filterable components for a Tabs
instance that should not fire a selection change event.
With this feature you may add components, that the user can interact with and let them handle the selection manually.
String[] arrayOfTagNames = new String[] {"vaadin-button", "vaadin-text-field", ...};
TabsExtension.createFilterForTabs(tabs, arrayOfTagNames);
This method is needed when you add writable components (like a text field) as part of you tabs or as a tab sheet component. Otherwise the tab sheet will select text matching tabs when you "type" the respective key.
TabsExtension.disableKeySelectionOfTabs(tabs);
All TabExtension methods will return a Registration with that you may remove the changes from your element.
Registration registration = TabsExtension.createFilterForTabs(tabs, ...); // filter activated
registration.remove(); // after that call the filter will be deactivated
The extension comes also with a implementation for closeable tabs. You may use them like other tabs, the only difference is, that the tab shows a close button, that will remove the tab from the tab sheet and handle the selection of a new tab.
You may style the tab as wanted. To style the button, just use the getButton()
method of the tab.
CloseableTab closeableTab = new CloseableTab("Label");
closeableTab.addClassName("my-closeable-tab");
closeableTab.getButton().addClassName("my-closeable-button");
Tabs tabs = new Tabs();
add(tabs);
IntStream.range(0, 10)
.mapToObj(value -> new CloseableTab("Tab " + value))
.forEach(tabs::add);
tabs.addSelectedChangeListener(event -> Notification.show("Selected " + tabs.getSelectedIndex()));
TabsExtension.createFilterForTabs(tabs, CloseableTab.TABS_FILTER);
TabsExtension.modifyKeyHandlerOfTabs(tabs, false, true);
Tabs tabs = new Tabs();
add(tabs);
tabs.addSelectedChangeListener(event -> Notification.show("Selected " + tabs.getSelectedIndex()));
HorizontalLayout layout = new HorizontalLayout();
TextField text = new TextField();
Button add = new Button("Add");
add.addClickListener(event -> {
Tab tab = new Tab(text.getValue());
tabs.add(tab);
tabs.getElement().insertChild(tabs.getComponentCount() - 1, tab.getElement());
tabs.setSelectedTab(tab);
text.clear();
});
layout.add(text, add);
tabs.add(layout);
TabsExtension.createFilterForTabs(tabs, "vaadin-text-field", "vaadin-button");
TabsExtension.modifyKeyHandlerOfTabs(tabs, true, false);