Tree

Tree — это компонент, использующийся для отображения иерархических структур, представленных расширяемыми узлами дерева. Компонент используется для сущностей, которые имеют ссылки на самих себя.

XML-имя компонента: tree.

Основы

Ниже представлено типичное дерево:

tree simple
  1. Переключатели для развертывания и свертывания узлов дерева

Атрибут dataContainer компонента Tree должен содержать ссылку на контейнер коллекции.

Атрибут hierarchyProperty определяет имя атрибута сущности, которая ссылается на ту же сущность.

Ниже приведен пример описания компонента в XML-дескрипторе экрана:

<data>
    <collection id="departmentsDc" class="ui.ex1.entity.Department">
        <fetchPlan extends="_base">
            <property name="parentDept" fetchPlan="_base"/>
            <property name="manager" fetchPlan="_base"/>
        </fetchPlan>
        <loader id="departmentsDl">
            <query>
                <![CDATA[select e from uiex1_Department e]]>
            </query>
        </loader>
    </collection>
</data>
<layout spacing="true">
    <tree id="simpleTree"
          dataContainer="departmentsDc"
          hierarchyProperty="parentDept"
          width="100%"/>
</layout>
Tree отображает сразу все записи, доступные в контейнере данных, поэтому его не следует использовать для отображения большого объема данных.

Режимы содержимого

Атрибут contentMode определяет, как должны отображаться названия элементов дерева. Существует три предопределенных режима:

  • TEXT - текстовые значения отображаются как простой текст.

  • PREFORMATTED - текстовые значения отображаются в виде предварительно отформатированного текста. В этом режиме новые строки сохраняются при отображении на экране.

  • HTML - текстовые значения интерпретируются и отображаются как HTML. При использовании HTML не забывайте экранировать данные, чтобы предотвратить инжектирование кода.

Режим содержимого по умолчанию – TEXT.

Режимы выделения

Атрибут selectionMode определяет режим выделения строк. Существует три предопределенных режима выбора:

  • SINGLE - поддерживается одновременное выделение только одной строки.

  • MULTI - поддерживается множественное выделение.

  • NONE - отключает выделение строк.

Режим выбора по умолчанию – SINGLE.

Высота строки

Атрибут rowHeight устанавливает высоту строки в пикселях. Если значение равно -1`, высота строки рассчитывается на основе темы для пустой строки перед отображением дерева.

Значение по умолчанию равно -1.

Методы интерфейса Tree

  • collapseTree() - свертывает все узлы дерева.

  • expandTree() - развертывает все узлы дерева.

События и слушатели

Чтобы сгенерировать заглушку слушателя в Jmix Studio, выберите компонент в XML-дескрипторе экрана или на панели иерархии Jmix UI и используйте вкладку Handlers на панели инспектора Jmix UI.

В качестве альтернативы вы можете воспользоваться кнопкой Generate Handler на верхней панели контроллера экрана.

CollapseEvent

Событие, отправляемое при сворачивании элемента.

Пример подписки на событие для дерева, определенного в XML экрана с идентификатором deptTree:

@Subscribe("deptTree")
public void onDeptTreeCollapse(Tree.CollapseEvent<Department> event) {
    notifications.create()
            .withCaption("Collapsed: " + event.getCollapsedItem().getName())
            .show();
}

Чтобы создать слушателя события программно, используйте метод компонента addCollapseListener().

ContextHelpIconClickHandler

DescriptionProvider

DescriptionProvider генерирует описания всплывающих подсказок для элементов дерева, отображаемых, когда на них наводит курсор.

В приведенном ниже примере показано использование DescriptionProvider для simpleTree:

@Install(to = "simpleTree", subject = "descriptionProvider")
private String simpleTreeDescriptionProvider(Department department) {
    return "The manager of the " + department.getName() +
            " department is " + department.getManager().getName();
}
tree description provider

Чтобы создать слушателя события программно, используйте метод компонента setDescriptionProvider(). DescriptionProvider может отображать HTML, если значение ContentMode.HTML передается параметру contentMode.

ExpandEvent

ExpandEvent отправляется при разворачивании элемента.

Пример подписки на событие для дерева, определенного в XML экрана с идентификатором deptTree:

@Subscribe("deptTree")
public void onDeptTreeExpand(Tree.ExpandEvent<Department> event) {
    notifications.create()
            .withCaption("Expanded: " + event.getExpandedItem().getName())
            .show();
}

Чтобы создать слушателя события программно, используйте метод компонента addExpandListener().

IconProvider

См. IconProvider.

ItemCaptionProvider

ItemCaptionProvider позволяет изменить отображаемые названия для каждого элемента дерева:

@Install(to = "departmentTree", subject = "itemCaptionProvider")
private String departmentTreeItemCaptionProvider(Department department) {
    return "Department: " + department.getName() +
            ", manager: " + department.getManager().getName();
}
tree item caption provider

Чтобы создать слушателя события программно, используйте метод компонента setItemCaptionProvider().

LookupSelectHandler

SelectionEvent

StyleProvider

См. StyleProvider.

Все XML-атрибуты

Просматривать и редактировать атрибуты, применимые к компоненту, можно с помощью панели инспектора Jmix UI в конструкторе экранов Studio.

XML-элементы дерева