我正在使用一个JTree,其中需要将新节点动态插入根节点(考虑将子节点添加到root)。用户选择节点并单击按钮后,需要在所选节点之后添加新节点。如果未选择任何节点,则它将在树的末尾添加新节点。以下是我的代码
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
如果树没有展开,那么一切都正常。请让我知道如何解决这个问题。有没有其他方法可以在树中获得特定级别的子项?
答案 0 :(得分:0)
也许以下代码可以解决您的问题。
int currentNoOfChildren = getTcBuilderTree().getVisibleRowCount();