繁体   English   中英

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

[英]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 返回的ObservableListTreeItem的顺序是您可以在屏幕上看到的实际顺序,因此您可以在使用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::getRow

返回给定 TreeItem 的索引位置,假设它当前可通过树层次结构访问(最值得注意的是,所有父树项都已展开)。 如果折叠了父树项,则结果是此方法将返回 -1 以指示给定的树项在树中不可访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM