2016-03-15 5 views
0

Я использую JTree, в котором новые узлы необходимо динамически вставлять в корень (подумайте о добавлении дочерних элементов в root). Когда пользователь выбирает узел и нажимает кнопку, новый узел должен быть добавлен после выбранного узла. Если ни один из узлов не выбран, он добавляет новый узел в конец дерева. Ниже мой кодКак получить индекс выбранного узла в selcted уровне в JTree

 public void addNodeToRoot(TestCase testCase) { 
     DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(testCase.toString()); 
     int currentNoOfChildren = getTcBuilderTree().getModel().getChildCount(getTcBuilderTree().getModel().getRoot()); 
     TreePath currentSelection = getTcBuilderTree().getSelectionPath(); 
     int currentIndex=0; 
     //if the user has not selected a node add the test case at the end of the tree 
     if (currentSelection == null) { 
      currentIndex = currentNoOfChildren; 
     } 
     //if user has selected a node then insert the new node after the selected node 
     else { 
       int[] currentSelectedIndex = getTcBuilderTree().getSelectionRows(); 
       currentIndex = currentSelectedIndex[0]; 

     } 
     treeModel.insertNodeInto(childNode, getRoot(), currentIndex); 
    } 

работает все нормально, но код дает исключение, когда есть дочерние узлы на уровне 3, а также. Причина в том, что дерево имеет больше уровней, а когда его расширяет, то currentIndex дает неожиданный номер (он подсчитывает все индексы на всех уровнях от корня до выбранного узла), а приложение дает ArrayIndexOutOfBoundsException, так как currentIndex становится больше currentNoOfChildren

Если дерево не разворачивается, все происходит правильно. Пожалуйста, дайте мне знать, как это решить. Есть ли другой способ получить детей из определенного уровня в дереве?

enter image description here

enter image description here

ответ

0

Может быть ниже код может решить вашу проблему.

int currentNoOfChildren = getTcBuilderTree().getVisibleRowCount(); 
+0

Это не работает. Это то же исключение. Проблема существует с текущим выбранным индексом, а не с числом детей – sher17

+0

Какой случай вызывает исключение? (выбран узел или нет). Другой вопрос: если узел, выбранный на уровне 3, вы хотите добавить новый узел на этот уровень или на корневой уровень? Если вы хотите добавить его на уровень 3, вы также должны изменить родительский узел. – rdonuk

+0

'Когда узлы второго уровня имеют дочерние узлы и когда выбран последний узел второго уровня', это то, где генерируется исключение. Я использую два целых числа, чтобы получить индекс текущего выбранного узла и число детей корневого узла. текущий выбранный индекс изменяется, когда дерево рушится с некоторыми или всеми его суб-уровнями. отвечая на ваш второй вопрос. когда я выбираю узловой уровень уровня и добавляю новый узел, ничего не должно произойти (это работает), когда выбран корень или узел второго уровня, а новый узел добавляет к корню. Я попытаюсь добавить изображение выше – sher17

Смежные вопросы