我有一个TreeView,其中包含用户对象。TreeView代表了用户的层次结构:
- Master1
- Super1
- Super2
- User1
- User2
- Super3
- User3
- Super4
- Master2
- ...
当TreeView初始化时,每个TreeItem都是折叠的。但是,在加载FXML时,可能会从另一个FXML文件传递一个TreeItem对象。例如:已经传递了User3:
selectedUserTreeItem = (TreeItem<User>) currentNavigation.getPassthroughObject(); //this is the User3 TreeItem
我尝试使用递归函数来展开所有从 selecterUserTreeItem
开始的父节点。
if (selectedUserTreeItem != null) {
expandTreeView(selectedUserTreeItem);
}
tvUsers.setRoot(rootItem);
这是我目前的成果:
到目前为止,这就是我的成果:
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");
}
}
我认为这与函数是void函数有关,应该返回一个TreeItem对象,但由于某种原因,我无法成功地实现它。
能否有人指点一下我应该怎么做呢?
selectedItem
不是新初始化的TreeView中的TreeItem,因为它是从另一个FXML文件传递过来的。我必须循环遍历初始化的TreeView以将循环中的TreeItem链接到selectedItem。完成后,该方法运行得非常好。非常感谢您的时间,圣诞快乐! - Perneel