gpt4 book ai didi

JavaFX:如何在 TreeView 中查找 TreeItem 的索引?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:22 27 4
gpt4 key购买 nike

我的程序中有一个TreeView 和一个Button。每当单击此 Button 时,它都会在 TreeView 中最后选择的元素之后添加一个新元素。 enter image description here

例如,如果我要选择“测试操作”元素并单击“添加”按钮,它应该在“测试操作”之后但在“测试条件”之前添加另一个 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,“current”,我无法使用任何方法在 TreeView 中找到它的索引。

我可以这样做:

root.getChildren().add(index, new TreeItem<String>(new OpenBank().getAction(), Icons.ACTION.getIcon()));

那么有没有办法在 TreeView 中找到 child 的索引?

最佳答案

TreeItem 类有一个方法 getParent ,它返回指定 TreeItem 的父项。这个也是 TreeItem 的父项有一个方法 getChildren获取子 TreeItem;返回的 ObservableListTreeItem 的顺序是您可以在屏幕上看到的实际顺序,因此您可以使用 add 在特定索引中插入新元素。使用 indexOf() 检索列表中元素的索引后.

您可以在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"));
});

关于JavaFX:如何在 TreeView 中查找 TreeItem 的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37718546/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com