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

时间:2016-06-09 06:39:36

标签: java javafx treeview

我的计划中有Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra("android.intent.extras.CAMERA_FACING",android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT); startActivityForResult(intent, RESULT_LOAD_CAMERA); headers.setContentType(MediaType.parseMediaType("application/pdf;charset=utf-8")); 。只要单击此TreeView,它就会在TreeView中最后选择的元素之后添加一个新元素。 enter image description here

例如,如果我选择“Test Action”元素并单击“Add”按钮,它应该在“Test Action”之后但在“Test Condition”之前添加另一个Button

我编写了代码,以便跟踪最后选择的元素:

Button

但是,通过使用TreeItem,“current”,我没有办法在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(); } }); 中找到孩子的索引?

1 个答案:

答案 0 :(得分:3)

TreeItem有一个方法getParent,它返回指定TreeItem的父级。这个父级也是TreeItem,有一个方法getChildren来获取孩子TreeItem;返回的TreeItemObservableList s的顺序是您在屏幕上可以看到的实际顺序,因此您可以在检索到add之后在indexOf()的特定索引中插入新元素带有{{3}}的列表中元素的索引。

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