Per*_*eel 4 treeview recursion javafx-2 javafx-8
我有一个存在于User对象之外的TreeView。TreeView代表用户的层次结构:
初始化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对象,但是由于某种原因,我没有成功执行该操作。
有人可以指出我正确的方向吗?
好的,我注意到在您的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)