我有一个存在于User对象之外的TreeView。TreeView代表用户的层次结构:
硕士1
超级1
超级2
用户1
用户2
超级3
用户3
超级4
硕士2
...
初始化TreeView时,每个TreeItem都会折叠。但是,可能是在加载FXML时,从另一个FXML文件传递了TreeItem对象。例如:User3已通过:
selectedUserTreeItem = (TreeItem) currentNavigation.getPassthroughObject(); //this is the User3 TreeItem
我尝试使用递归函数来扩展所有父节点 selecterUserTreeItem
if (selectedUserTreeItem != null) { expandTreeView(selectedUserTreeItem); } tvUsers.setRoot(rootItem);
这是我到目前为止的内容:
private void expandTreeView(TreeItemselectedItem) { if (selectedItem != null) { System.out.println(selectedItem); if (selectedItem.isLeaf() == false) { selectedItem.setExpanded(true); } TreeItem parent = selectedItem.getParent(); expandTreeView(parent); } else { System.out.println("null"); } }
我认为它必须与以下事实有关:该函数是一个void函数,它应该返回一个我猜想的TreeItem对象,但是由于某种原因,我没有成功执行该操作。
有人可以指出我正确的方向吗?
好的,我注意到在您的expandTreeView()方法中,您将节点展开,然后递归到上一个节点以进行扩展。在我自己的代码中,我从根扩展到了叶,所以让我们尝试一下:
private void expandTreeView( TreeItem<User> selectedItem ) { if ( selectedItem != null ) { expandTreeView( selectedItem.getParent() ); if ( ! selectedItem.isLeaf() ) { selectedItem.setExpanded( true ); } } }