Я пишу дерево Java, в котором узлы дерева могут иметь дочерние элементы, для вычисления которых требуется много времени (в данном случае это файловая система, где могут быть сетевые тайм-ауты, препятствующие получению списка файлов с подключенного диска).
Проблема, которую я нахожу, заключается в следующем:
getChildCount()
вызывается перед тем, как пользователь специально запрашивает открытие определенной ветви дерева. Я считаю, что это сделано для того, чтобыJTree
знал, показывать ли значок + рядом с узлом.Для выполнения потенциально дорогостоящей операции потребуется точный подсчет детей из
getChildCount()
.Если я подделываю значение
getChildCount()
, дерево выделяет место только для этого количества дочерних узлов, прежде чем запрашивать перечисление дочерних узлов. (Если я верну «1», я увижу только 1 ребенка в списке, несмотря на то, что их больше)
Подсчет детей может быть дорогим и трудоемким, я согласен с этим. Но я не согласен с тем, что getChildCount()
нужно знать точное количество детей.
Как я могу обойти это?
Добавлено: Другая проблема заключается в том, что если один из узлов представляет дисковод для гибких дисков (как это архаично!), дисковод будет опрошен до того, как пользователь запросит его файлы; если в приводе нет диска, это приводит к системной ошибке.
Обновление: К сожалению, реализация прослушивателя TreeWillExpand
не является решением. Это может позволить вам наложить вето на расширение, но количество отображаемых узлов по-прежнему ограничено значением, возвращаемым TreeNode.getChildCount()
.