JavaFX:如何在TreeView中找到TreeItem的索引?
我的程序中有一个JavaFX:如何在TreeView中找到TreeItem的索引?,java,javafx,treeview,Java,Javafx,Treeview,我的程序中有一个TreeView和一个按钮。无论何时单击此按钮,它都会在树视图中最后选择的元素之后添加一个新元素。 例如,如果我要选择“Test Action”元素并单击“Add”按钮,它应该在“Test Action”之后但在“Test Condition”之前添加另一个TreeItem 我编写了代码,以便跟踪最后选择的元素: @FXML TreeView<String> view; TreeItem<String> current = root; view.sele
TreeView
和一个按钮。无论何时单击此按钮
,它都会在树视图中最后选择的元素之后添加一个新元素。
例如,如果我要选择“Test Action”元素并单击“Add”按钮,它应该在“Test Action”之后但在“Test Condition”之前添加另一个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();
}
});
@FXML
树视图;
TreeItem电流=根;
view.selectionModelProperty().addListener(新的ChangeListener()){
@凌驾
更改公众假期(observeValue类TreeItem
有一个方法,它返回指定的TreeItem
的父级。这个父级也是TreeItem
有一个方法来获取子TreeItem
s;返回的observebelist
中的TreeItem
的顺序是您可以执行的实际顺序请参见屏幕上的,因此,在使用检索列表中元素的索引后,可以使用在特定索引中插入新元素
您只需在按钮的事件侦听器中处理当前选择
:
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"));
});
我认为这只适用于深度为1的树的这种特定情况。你知道一种有效的方法来处理任意树吗?它应该适用于任何级别。例如,如果你有一棵树有三个级别,如果你选择一个级别3的叶子,它将添加一个新的级别3叶子。如果你选择一个级别2的分支,它将添加一个新的级别2分支。它是什么oes not do:不会向level2分支添加新的level3叶,但它是一种不同的功能。
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"));
});
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"));
});