如何在JTree中以选择的级别获取所选节点的索引

时间:2016-03-15 05:19:30

标签: java swing jtree

我正在使用一个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

如果树没有展开,那么一切都正常。请让我知道如何解决这个问题。有没有其他方法可以在树中获得特定级别的子项?

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

也许以下代码可以解决您的问题。

int currentNoOfChildren = getTcBuilderTree().getVisibleRowCount();