展开包含所选项目的TreeView(父)节点

Per*_*eel 4 treeview recursion javafx-2 javafx-8

我有一个存在于User对象之外的TreeView。TreeView代表用户的层次结构:

  • 硕士1
    • 超级1
    • 超级2
      • 用户1
      • 用户2
    • 超级3
      • 用户3
    • 超级4
  • 硕士2
  • ...

初始化TreeView时,每个TreeItem都会折叠。但是,可能是在加载FXML时,从另一个FXML文件传递了TreeItem对象。例如:User3已通过:

selectedUserTreeItem = (TreeItem<User>) currentNavigation.getPassthroughObject(); //this is the User3 TreeItem
Run Code Online (Sandbox Code Playgroud)

我尝试使用递归函数来扩展所有父节点 selecterUserTreeItem

if (selectedUserTreeItem != null) {
    expandTreeView(selectedUserTreeItem);
}

tvUsers.setRoot(rootItem);
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的内容:

private void expandTreeView(TreeItem<User> selectedItem) {        
    if (selectedItem != null) {
        System.out.println(selectedItem);
        if (selectedItem.isLeaf() == false) {
            selectedItem.setExpanded(true);
        }
        TreeItem<User> parent = selectedItem.getParent();
        expandTreeView(parent);
    } else {
        System.out.println("null");
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为它必须与以下事实有关:该函数是一个void函数,它应该返回一个我猜想的TreeItem对象,但是由于某种原因,我没有成功执行该操作。

有人可以指出我正确的方向吗?

Jur*_*gen 5

好的,我注意到在您的expandTreeView()方法中,您将节点展开,然后递归到上一个节点以进行扩展。在我自己的代码中,我从根扩展到了叶,所以让我们尝试一下:

private void expandTreeView( TreeItem<User> selectedItem ) 
{
    if ( selectedItem != null ) 
    {
        expandTreeView( selectedItem.getParent() );

        if ( ! selectedItem.isLeaf() ) 
        {
            selectedItem.setExpanded( true );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)