我有一棵家庭成员。我正在尝试提供一个SEARCH工具,它允许我选择人名包含SEARCH名称的所有树项。看到这个屏幕截图,虽然第一个项目与RAJA匹配但未选中。
现在,当我再次点击“定位”按钮时,选项正确,如您所见。
这是LOCATE BUTTON CLICKED的代码。
@FXML
void onLocateClicked(MouseEvent event) {
childrenTreeView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
childrenTreeView.getSelectionModel().clearSelection();
String tmpLocateString = txtLocate.getText().toLowerCase();
TreeItem<APerson> item = childrenTreeView.getRoot();
item.setExpanded(true);
System.out.println("Locate ->"+tmpLocateString+" Root value = "+item.getValue().getPersonName());
if (item == null) {
// Don't do anything
return;
}
if (item.getValue().getPersonName().toLowerCase().contains(tmpLocateString)){
System.out.println("Item ->"+item+" MATCHES (LocateClicked)");
childrenTreeView.getSelectionModel().select(item);
}
doSearch(item, tmpLocateString);
}
private void doSearch(TreeItem<APerson> item, String tmpLocateString) {
System.out.println("Current Parent :" + item.getValue());
if (item != childrenTreeView.getRoot()) {
if (item.getValue().getPersonName().toLowerCase().contains(tmpLocateString)){
System.out.println("Item ->"+item+" MATCHES (in doSearch)");
childrenTreeView.getSelectionModel().select(item);
}
}
for(TreeItem<APerson> child: item.getChildren()){
String personName = child.getValue().getPersonName();
if (personName.toLowerCase().contains(tmpLocateString)) {
childrenTreeView.getSelectionModel().select(child);
}
if(child.getChildren().isEmpty()){
System.out.println(" No Children for this node : "+personName);
} else {
doSearch(child, tmpLocateString);
}
}
}
在第一个错误之后,所有其他搜索的选择正常工作.....任何人都可以猜出是什么问题? &#34; doSearch&#34;函数递归遍历整个树。
提前感谢您的帮助。
Hornigold
这是我对onLocateClicked所做的更改,但它没有用。
void onLocateClicked(MouseEvent event) {
TreeItem<APerson> item = childrenTreeView.getRoot();
if (item == null) {
// Don't do anything
return;
}
String tmpLocateString = txtLocate.getText().toLowerCase();
childrenTreeView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
childrenTreeView.getSelectionModel().clearSelection();
item.setExpanded(true);
System.out.println("Locate ->"+tmpLocateString+" Root value = "+item.getValue().getPersonName());
if (item.getValue().getPersonName().toLowerCase().contains(tmpLocateString)){
System.out.println("Item ->"+item+" MATCHES (LocateClicked)");
childrenTreeView.getSelectionModel().select(item);
}
doSearch(item, tmpLocateString);
}