[英]How to delete a specific TreeItem from the TreeView in javafx?
[英]JavaFX: How to find index of TreeItem in a TreeView?
我的程序中有一个TreeView
和一个Button
。 每当单击此Button
时,它都会在 TreeView 中最后选择的元素之后添加一个新元素。
例如,如果我要选择“测试操作”元素并单击“添加”按钮,它应该在“测试操作”之后、“测试条件”之前添加另一个TreeItem
。
我编写了代码,以便跟踪最后选择的元素:
@FXML
TreeView<String> view;
TreeItem<String> current = root;
view.selectionModelProperty().addListener(new ChangeListener<MultipleSelectionModel<TreeItem<String>>>() {
@Override
public void changed(ObservableValue<? extends MultipleSelectionModel<TreeItem<String>>> observable,
MultipleSelectionModel<TreeItem<String>> oldValue,
MultipleSelectionModel<TreeItem<String>> newValue) {
current = newValue.getSelectedItem();
}
});
但是,通过使用 TreeItem,“当前”,我无法使用任何方法在 TreeView 中找到它的索引。
这样我就可以做到:
root.getChildren().add(index, new TreeItem<String>(new OpenBank().getAction(), Icons.ACTION.getIcon()));
那么有没有办法在TreeView
中找到孩子的索引?
TreeItem
类有一个方法getParent
,它返回指定TreeItem
的父级。 这个也是TreeItem
的父级有一个方法getChildren
来获取子TreeItem
; 返回的ObservableList
中TreeItem
的顺序是您可以在屏幕上看到的实际顺序,因此您可以在使用indexOf()
检索列表中元素的索引后,使用add
在特定索引中插入新元素。
您可以在Button
的事件侦听器中简单地处理当前选择:
Button b = new Button("Add");
b.setOnAction(event -> {
// Get the selected item
TreeItem<String> selectedItem = treeView.getSelectionModel().getSelectedItem();
// If there is no selection or the root is selected do nothing
if (selectedItem == null || selectedItem == rootNode)
return;
// Otherwise get the index of the Node from the children of its parent
// and append the new item right after it
int index = selectedItem.getParent().getChildren().indexOf(selectedItem);
selectedItem.getParent().getChildren().add(index+1, new TreeItem<>("New Item"));
});
如果您已经跟踪当前选择:
修改只是使用current
(这就是您命名变量的方式),而不是在处理程序中获取选择:
Button b = new Button("Add");
b.setOnAction(event -> {
// If there is no selection or the root is selected do nothing
if (current == null || current == rootNode)
return;
// Otherwise get the index of the Node from the children of its parent
// and append the new item right after it
int index = current.getParent().getChildren().indexOf(current);
current.getParent().getChildren().add(index+1, new TreeItem<>("New Item"));
});
返回给定 TreeItem 的索引位置,假设它当前可通过树层次结构访问(最值得注意的是,所有父树项都已展开)。 如果折叠了父树项,则结果是此方法将返回 -1 以指示给定的树项在树中不可访问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.