我有一个 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类中,所以我只需为此添加一个计数器
您不需要使用计数器,选择项目后,只需调用它即可...
treeView.scrollTo(treeView.getSelectionModel().getSelectedIndex());