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

问题描述 投票:0回答:2

我有一个 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);

这可能可以完成工作。

javafx search treeview treeviewitem
2个回答
0
投票

终于找到解决办法了:

@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类中,所以我只需为此添加一个计数器


0
投票

您不需要使用计数器,选择项目后,只需调用它即可...

treeView.scrollTo(treeView.getSelectionModel().getSelectedIndex());

© www.soinside.com 2019 - 2024. All rights reserved.