Необходимо ли вызывать nodeWereInserted() и аналогичные методы в DefaultTreeModel?
В DefaultTreeModel вы можете вставить узел, используя insertNodeInto()
методы. Тем не менее, я заметил, что также существует nodesWereInserted()
метод, который имеет этот очень краткий Javadoc:
Вызовите этот метод после того, как вы вставите несколько узлов дерева в узел.
Мне очень странно, что это публичный метод. Я ожидаю, что если бы он запускал ChangeEvents для слушателей, то это должен быть закрытый метод, который вызывается insertNodeInto()
, Просто кажется, что вызов метода для уведомления об изменении, вызванного другим методом, несколько не согласуется с тем, как спроектирован Java Swing (я не называю elementIsInserted()
метод, когда я добавляю элемент в JComboBox).
Но я обнаружил, что в моем коде не имеет значения, если я позвоню nodesWereInserted()
после insertNodeInto()
, В любом случае результаты получаются одинаковыми с добавлением узла в дерево и отображением в графическом интерфейсе.
Так может кто-то, пожалуйста, объясните, если это необходимо позвонить nodesWereInserted()
а похожие методы в DefaultTreeModel? И если так, то почему? Что это делает insertNodeInto()
не может сделать самостоятельно?
3 ответа
Вам не нужно называть это самостоятельно. Как сказал EJP, он вызывается каждый раз, когда вставляется узел. Вы можете переопределить эту функцию в своем производном классе, чтобы получить сигнал при вставке узла.
Если у вас нет собственного производного класса, просто добавьте TreeModellistener.
Представьте, что ваша TreeModel использует независимое реальное дерево и некоторые узлы вставляются отдельным процессом, который не знает о существующей модели. Или две TreeModels используют одно и то же дерево объектов (узлов). Процесс просто добавляет детей к некоторым узлам. Или вы вставляете узел в первую модель, но также должны обновить вторую.
Тогда вам как-то надо обновить модель. В этом случае вы используете nodesWereInserted()
и вам нужен открытый метод для вызова извне модели.
Конечно, если вы звоните insertNodeInto()
nodesWereInserted()
называется внутри
У нас может быть свой собственный узел дерева, который выполняет некоторую обработку. (Скажем, мы хотим проверить, подходит ли новый узел для вставки.) Мы добавляем нового дочернего элемента в этот пользовательский узел дерева с помощью DefaultMutableTreeNode.insert()
метод. На данный момент нам нужно сообщить модели о вставке, вызвав DefaultTreeModel.nodesWereInserted()
метод. Если изменения слишком сложны, возможно, потребуется вызвать DefaultTreeModel.reload()
метод. Если у нас нет собственной обработки в нашем собственном узле дерева, то мы можем просто добавить новый узел, вызвав DefaultTreeModel.insertNodeInto()
,