MainTabSheet Component

Контейнер, предназначенный для отображения открытых экранов на вкладках. Одновременно видно только содержимое выбранной вкладки.

XML-элемент

mainTabSheet

Java-класс

MainTabSheet

Атрибуты

id - alignSelf - classNames - colspan - css - height - width - maxHeight - maxWidth - minHeight - minWidth - visible - themeNames - tabsDraggable

Обработчики

AttachEvent - DetachEvent - SelectedChangeEvent - TabsCollectionChangeEvent

Элементы

actions

Основы

Для создания компонента используйте XML-элемент mainTabSheet внутри элемента workArea. И workArea, и mainTabSheet доступны только в дескрипторе главного экрана.

Следующий пример демонстрирует создание базового mainTabSheet:

<mainTabSheet id="mainTabSheet"
              classNames="jmix-main-tabsheet"
              tabsDraggable="true"
              width="100%" height="100%">
    <actions>
        <action id="closeThisTabAction" type="tabmod_closeThisTab"/>
        <action id="closeOthersTabsAction" type="tabmod_closeOtherTabs"/>
        <action id="closeAllTabsAction" type="tabmod_closeAllTabs"/>
    </actions>
</mainTabSheet>

Действия

Компонент mainTabSheet реализует интерфейс HasActions и может содержать как стандартные, так и пользовательские действия. Действия вызываются из контекстного меню, которое появляется по щелчку правой кнопкой мыши на области вкладок.

tabsheet context menu

Стандартными действиями являются следующие:

tabmod_closeThisTab

Класс действия: CloseThisTabAction

Закрывает выбранную вкладку.

tabmod_closeOtherTabs

Класс действия: CloseOtherTabsAction

Закрывает все открытые вкладки в mainTabSheet, кроме выбранной.

tabmod_closeAllTabs

Класс действия: CloseAllTabsAction

Закрывает все открытые вкладки в mainTabSheet.

Drag and drop

mainTabSheet поддерживает перетаскивание вкладок. Эта возможность может использоваться, например, для изменения порядка вкладок.

Изменяя значение атрибута tabsDraggable, вы можете разрешить или запретить пользователю перетаскивать вкладки. Значение по умолчанию — false.

tabs reordering

События и обработчики

SelectedChangeEvent

При каждом переключении пользователем между вкладками генерируется событие io.jmix.tabbedmode.component.workarea.TabbedViewsContainer.SelectedChangeEvent. Создайте обработчик события для выполнения пользовательского кода в ответ на переключение вкладки.

Следующий код будет отправлять уведомление при каждом переключении вкладки:

@Autowired
private Notifications notifications;

@Subscribe("mainTabSheet")
public void onMainTabSheetSelectedChange(final SelectedChangeEvent<MainTabSheet> event) {
    notifications.create(event.getSelectedTab() + " is now selected")
            .show();
}
Чтобы сгенерировать заготовки методов-обработчиков в Studio, используйте кнопку Generate Handler на верхней панели контроллера экрана. Либо выберите компонент в дескрипторе экрана и используйте вкладку Handlers панели Component Inspector.

TabsCollectionChangeEvent

При открытии или закрытии пользователем экранов, что приводит к созданию новой вкладки или удалению существующей, генерируется событие io.jmix.tabbedmode.component.workarea.TabbedViewsContainer.TabsCollectionChangeEvent. Создайте обработчик события для выполнения пользовательского кода в ответ на изменение набора вкладок.

Следующий код будет отправлять уведомление при каждом изменении набора вкладок:

@Autowired
private Notifications notifications;

@Subscribe("mainTabSheet")
public void onMainTabSheetTabsCollectionChange(final TabsCollectionChangeEvent<MainTabSheet> event) {
    notifications.create("Tabs collection changed", "Change type: " + event.getChangeType())
            .show();
}
Чтобы сгенерировать заготовки методов-обработчиков в Studio, используйте кнопку Generate Handler на верхней панели контроллера экрана. Либо выберите компонент в дескрипторе экрана и используйте вкладку Handlers панели Component Inspector.

Варианты темы

centered

Располагает вкладки по центру главного экрана вместо стандартного положения по левому краю:

tabs centered
small

Уменьшает размер вкладок:

tabs small

minimal

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

tabs minimal

hide-scroll-buttons

Скрывает кнопки прокрутки, которые помогают перемещаться между не помещающимися вкладками:

tabs hide scroll buttons

bordered

Добавляет границу вокруг самих вкладок, а также вокруг области содержимого.

tabsheet bordered

Максимальная ширина текста вкладки

Вы можете ограничить ширину текста вкладок в mainTabSheet, задав значение CSS-переменной в теме приложения:

html {
  --jmix-tabmod-main-tab-text-max-width: 5em;
}

tab text max width