Основная причина заключается в том, что расположение узлов дерева кэшируется, а кэш не обновляется должным образом. Может быть, я произойдет, если узел изменяется под ногами модели, раскомментируйте nodeChanged, чтобы увидеть разницу
JTree tree = new JTree();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) tree.getModel().getRoot();
int index = 0;
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
String result = "\n";
Enumeration<?> enumer = root.preorderEnumeration();
while (enumer.hasMoreElements()) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) enumer.nextElement();
String nodeValue = String.valueOf(node.getUserObject());
node.setUserObject(nodeValue + ": " + index++);
//model.nodeChanged(node);
}
Точная причина в вашем контексте может отличаться, невозможно сказать без sscce