Java 如何获取JTree中选定级别中选定节点的索引

Java 如何获取JTree中选定级别中选定节点的索引,java,swing,jtree,Java,Swing,Jtree,我使用的是一个JTree,其中需要将新节点动态插入根目录(考虑向根目录添加子目录)。一旦用户选择一个节点并单击一个按钮,就需要在所选节点之后添加新节点。如果未选择任何节点,则会在树的末尾添加新节点。下面是我的代码 public void addNodeToRoot(TestCase testCase) { DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(testCase.toString(

我使用的是一个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会给出意外的数字(它统计从根到所选节点的所有级别中的所有索引)由于currentIndex大于currentNoOfChildren

如果树没有展开,那么一切都会正确发生。请让我知道如何解决这个问题。有没有其他方法可以获取树中特定级别的子级的编号


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

int currentNoOfChildren = getTcBuilderTree().getVisibleRowCount();

这行不通。它抛出相同的异常。当前所选索引存在问题,而不是子索引的问题。哪种情况导致异常?(无论是否选择节点)。另一个问题:如果在级别3中选择了一个节点,您希望将新节点添加到该级别还是根级别?如果要将其添加到级别3,则还必须更改父节点。“当第二级节点具有子节点且选择了最后一个第二级节点时”是引发异常的位置。我使用两个整数来获取当前选定节点的索引和根节点的子节点数。当树与其部分或所有子级别一起折叠时,当前选定的索引将发生更改。回答你的第二个问题。当我选择一个第三级节点并添加一个新节点时,如果选择了根节点或第二级节点,然后新节点添加到根节点,则不应该发生任何事情(这是有效的)。我将尝试在上面添加一个图像。我现在无法尝试,但是
DefaultMutableTreeNode
有一个名为
getIndex
的方法。也许您可以从根节点调用它,并将所选节点作为参数,为您返回正确的索引。您可以通过调用
getLastPathComponent
方法从
TreePath
获取节点对象。