Как я могу получить JTree
, чтобы послушать только его TreeModel
, пока он на самом деле виден для пользователя или, по крайней мере, чтобы он отменил регистрацию, как только будет установлен соответствующий JFrame
?Как отменить регистрацию JTree из TreeModel, пока она не видна?
Насколько я вижу единственный случай, JTree
снимает с себя свою модель, если вы передадите ей новую модель (используя setModel(…)
).
Это приводит к тому, что дерево не собирает мусор, если на модель ссылаются откуда-то еще. Пример: я реализовал TreeModel
с использованием WatchService
, чтобы иметь всегда обновленную модель дерева файловой системы. Даже один слушатель на модели требует, чтобы я оставил WatchService
, информируя модель о изменениях файловой системы, поэтому сбор мусора невозможен. Таким образом, даже если JTree
больше не отображается, он по-прежнему хранится в памяти моделью, которая все еще нуждается в получении обновлений от WatchService
, хотя ничто из этого не требуется больше.
Я думаю, что лучший способ - создать новый класс, расширяющий JTree
, который регистрирует и отменяет регистрацию из модели. Если да, то какие методы вызывают, когда компонент отображается или удаляется? Вероятно, addNotify()
и removeNotify()
являются хорошими кандидатами?
TreeModel? У вас должна быть настроенная таблица для начала ... JTables имеет TableModel. –
К сожалению, я имел в виду 'JTree', а не' JTable', я отредактирую свой вопрос, спасибо! :-П – siegi