FilteringTreeItem

class FilteringTreeItem<T : Any>(value: T) : TreeItem<T>

Универсальный TreeItem с фильтрацией и сортировкой без сторонних библиотек.

Идеи:

  1. Полный список детей хранится в internalChildren (источник истины).

  2. Видимые дети (children) — отфильтрованное/отсортированное зеркало internalChildren.

  3. Предикат predicate может наследоваться от родителя (inheritPredicate); суммарный — effectivePredicate.

  4. Если includeParentsOfMatches = true, родитель остаётся видимым при совпадениях среди потомков.

  5. При отсутствии предиката поведение задаёт includeWhenNoPredicate.

  6. Сортировка применяется только к видимым детям через comparator.

  7. Все изменения UI‑модели происходят на FX‑потоке; множественные запросы батчатся.

Рекомендации:

  • По возможности используйте FilteringTreeItem для всех узлов дерева, иначе «обычные» дети фильтруются только на своём уровне (их поддеревом эта реализация не управляет).

  • Не модифицируйте children напрямую — меняйте internalChildren или используйте addAll/setAll.

Constructors

Link copied to clipboard
constructor(value: T)

Properties

Link copied to clipboard
Link copied to clipboard
val autoExpandOnMatchProperty: SimpleBooleanProperty

Автоматически разворачивать узел, если среди потомков есть совпадения.

Link copied to clipboard
val children: ObservableList<TreeItem<T>>
Link copied to clipboard
var comparator: Comparator<TreeItem<T>>?
Link copied to clipboard
val comparatorProperty: ObjectProperty<Comparator<TreeItem<T>>?>

Компаратор видимых детей. Применяется только к «витрине», internalChildren не трогается.

Link copied to clipboard
val includeParentsOfMatchesProperty: SimpleBooleanProperty

Держать родителей видимыми, если у них есть совпадающие потомки.

Link copied to clipboard
Link copied to clipboard
val includeWhenNoPredicateProperty: SimpleBooleanProperty

Что показывать без предиката: всё (true) или ничего (false).

Link copied to clipboard
Link copied to clipboard
val inheritPredicateProperty: SimpleBooleanProperty

Наследовать ли предикат от родителя. По умолчанию — да.

Link copied to clipboard
val internalChildren: ObservableList<TreeItem<T>>

Полный список детей (не зависит от фильтра).

Link copied to clipboard
Link copied to clipboard
val matchesDescendantProperty: ReadOnlyBooleanProperty
Link copied to clipboard
Link copied to clipboard
val matchesSelfProperty: ReadOnlyBooleanProperty
Link copied to clipboard
Link copied to clipboard
val predicateProperty: ObjectProperty<Predicate<T>?>

Локальный предикат (null = «локального условия нет»).

Functions

Link copied to clipboard
fun addAll(vararg items: TreeItem<T>)

Добавить одного/нескольких детей в «источник истины».

Link copied to clipboard
open override fun <E : Event> addEventFilter(p0: EventType<E>, p1: EventHandler<in E>)
Link copied to clipboard
open override fun <E : Event> addEventHandler(p0: EventType<E>, p1: EventHandler<in E>)
Link copied to clipboard
open override fun buildEventDispatchChain(p0: EventDispatchChain): EventDispatchChain
Link copied to clipboard
fun TreeItem<ItemTreeDP>.buildPathName(includeRoot: Boolean = false): String
Link copied to clipboard
fun expandedProperty(): BooleanProperty
Link copied to clipboard

Ищет первый узел в дереве, у которого value.id == id. Возвращает TreeItem или null, если не найден. Сложность: O(N), где N — число узлов.

Link copied to clipboard
fun TreeItem<ItemTreeDP>.findElementById(id: Long): TreeItem<ItemTreeDP>?
Link copied to clipboard
fun getGraphic(): Node
Link copied to clipboard
fun getParent(): TreeItem<T>
Link copied to clipboard
fun getValue(): T
Link copied to clipboard
fun graphicProperty(): ObjectProperty<Node>
Link copied to clipboard
Link copied to clipboard
open fun isLeaf(): Boolean
Link copied to clipboard
fun leafProperty(): ReadOnlyBooleanProperty
Link copied to clipboard
open fun nextSibling(): TreeItem<T>
open fun nextSibling(p0: TreeItem<T>): TreeItem<T>
Link copied to clipboard
fun parentProperty(): ReadOnlyObjectProperty<TreeItem<T>>
Link copied to clipboard
open fun previousSibling(): TreeItem<T>
open fun previousSibling(p0: TreeItem<T>): TreeItem<T>
Link copied to clipboard
fun refreshFast(treeView: TreeView<T>? = null, children: Collection<out TreeItem<T>>, preserveSelection: Boolean = true)
fun refreshFast(treeView: TreeView<T>? = null, children: Collection<out TreeItem<T>>, structureComparator: Comparator<TreeItem<T>>, recursive: Boolean = false, preserveSelection: Boolean = true)
Link copied to clipboard
fun <R : Comparable<R>> refreshFastSortedBy(treeView: TreeView<T>? = null, children: Collection<out TreeItem<T>>, selector: (T) -> R?, ascending: Boolean = true, nullsLast: Boolean = true, recursive: Boolean = false, preserveSelection: Boolean = true)
Link copied to clipboard
open override fun <E : Event> removeEventFilter(p0: EventType<E>, p1: EventHandler<in E>)
Link copied to clipboard
open override fun <E : Event> removeEventHandler(p0: EventType<E>, p1: EventHandler<in E>)
Link copied to clipboard

Запросить пересчёт на FX‑потоке (батчинг).

Link copied to clipboard
fun setAll(items: Collection<TreeItem<T>>)

Заменить список детей в «источнике истины».

fun setAll(items: Iterable<T>, factory: (T) -> TreeItem<T>)

Заменить детей, отмапив коллекцию значений через фабрику TreeItem.

Link copied to clipboard
Link copied to clipboard
fun setGraphic(p0: Node)
Link copied to clipboard

Массово применить предикат к текущему узлу и потомкам‑FilteringTreeItem.

Link copied to clipboard
fun setValue(p0: T)
Link copied to clipboard
fun sortStructure(comparator: Comparator<TreeItem<T>>, recursive: Boolean = false)

Структурная сортировка: переставляет internalChildren по компаратору.

Link copied to clipboard
fun <R : Comparable<R>> sortStructureBy(selector: (T) -> R?, ascending: Boolean = true, nullsLast: Boolean = true, recursive: Boolean = false)

Удобная структурная сортировка по значению (value) с селектором ключа.

Link copied to clipboard
open override fun toString(): String
Link copied to clipboard
fun valueProperty(): ObjectProperty<T>