搜索并找到TreeItem后,可以滚动到TreeView中的选定项目吗? JavaFX

问题描述

我有一个TreeView里面有很多TreeItems。我已经建立了一个搜索功能,该功能可以工作并选择指定的TreeItem,但是TreeView滚动功能无法滚动到它,因此必须手动操作,这一点都不方便。搜索成功完成后,是否可以通过某种方式自动滚动到节点(TreeItem)?

搜索功能代码:

@FXML
private void searchButtonEvent(ActionEvent event) {
    TreeItem<String> rootItem = treeView.getRoot();
    String textFieldText;
    boolean flag = false;

    textFieldText = textField.getText();
    searchStatus.setText("");

    if (textFieldText.equals("")) {
        searchStatus.setText("Please enter something to be searched");
    } else {
        for (int i = 0; i < 2; i++) {
            for (TreeItem<String> treeItem : rootItem.getChildren().get(i).getChildren()) {
                if (treeItem.getValue().contains(textFieldText)) {
                    treeView.getSelectionModel().select(treeItem);
                    searchStatus.setText("");
                    flag = true;
                } else {
                    if (!flag) {
                        searchStatus.setText("Not found");
                    }
                }
            }
        }
    }
}

我想这可能是紧随其后的方法

treeView.getSelectionModel().select(treeItem);

可能会完成工作。

解决方法

终于找到了解决方案:

@FXML
private void searchButtonEvent(ActionEvent event) {
    TreeItem<String> rootItem = treeView.getRoot();
    String textFieldText;
    boolean flag = false;
    int count = 0;

    textFieldText = textField.getText();
    searchStatus.setText("");

    if (textFieldText.equals("")) {
        searchStatus.setText("Please enter something to be searched");
    } else {
        for (int i = 0; i < 3; i++) {
            for (TreeItem<String> treeItem : rootItem.getChildren().get(i).getChildren()) {
                count++;
                if (treeItem.getValue().contains(textFieldText)) {
                    treeView.getSelectionModel().select(treeItem);
                    treeView.scrollTo(count);
                    searchStatus.setText("");
                    flag = true;
                } else {
                    if (!flag) {
                        searchStatus.setText("Not found");
                    }
                }
            }
        }
    }
}

该方法位于名为scrollTo(int)的TreeView类中,因此我只需要为此添加一个计数器

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...