Переименование узла JTree вручную в Java - PullRequest
4 голосов
/ 12 июля 2011

Я создал jtree с корневым узлом "RootNode" и некоторыми другими узлами, такими как "Node1", "Node2", Node3 ".

После создания дерева я хочу переименовать корневой узел или любой другой узел вручную. Мы можем переименовать узел динамически, используя метод

 jtee.setEditable(true);

Но я хочу изменить название в ручном режиме по уровню кода

как

 someMethod(Arg1 oldNodeName,Arg2 newNodeName)

Есть ли способ сделать это?

Ответы [ 4 ]

4 голосов
/ 12 июля 2011

Если вы используете DefaultMutableTreeNode, вы можете просто изменить UserObject (метод toString () которого используется для отображения имени узла), вызвав: setUserObject() на узле, который вы хотите изменить.

3 голосов
/ 12 июля 2011

Я предполагаю, что вы используете дерево с DefaultTreeModel, используя экземпляры DefaultMutableTreeNode.

Вам нужно будет пройтись по узлам дерева и найти тот, который имеет oldNodeName как пользовательский объект, затем измените его пользовательский объект на newNodeName и вызовите метод nodeChanged модели дерева.

1 голос
/ 06 марта 2015

Чтобы правильно переименовать a DefaultMutableTreeNode, необходимо установить его новый пользовательский объект, а также уведомить модель таблицы JTree s, которую изменил узел, чтобы он мог изменить его размер дляболее короткий / длинный текст.

Предполагая, что ваше дерево использует DefaultTreeModel, используйте это:

public void renameNode(JTree tree, DefaultMutableTreeNode node, Object new_user_object) {
     node.setUserObject(new_user_object);
     ((DefaultTreeModel) tree.getModel()).nodeChanged(node);
}
0 голосов
/ 25 марта 2016

Это меняет пользовательский интерфейс, если:

  • вы используете модель DefaultTreeModel
  • вы фактически меняете UserObject

То естьчто-то вроде этого:

// TheNode is a CustomMutableTreeNode (extending DefaultMutableTreeNode)
// and points to the selected node to alter
String NewNodeName = Dlg.NewNodeName.getText();
if(!NewNodeName.isEmpty()) {
    ON.setName(NewNodeName); // ON is the real source data
    TheNode.setUserObject(NewNodeName);
    ((DefaultTreeModel)JSONTree.getModel()).nodeChanged(TheNode);
}

Мне потребовалось довольно много времени, чтобы понять, что изменение исходных данных (в положении ON) ничего не изменило в пользовательском интерфейсе, даже с repaint () ;.Вы действительно должны обновить theUserObject (строку из DefaultMutableTreeNode)

Как только это будет сделано, это самое простое и элегантное решение IMO.

...