JavaFX选择TREE项目行为在此之后第一次行走时行为不正常

时间:2018-03-18 09:30:26

标签: treeview javafx-8

我有一棵家庭成员。我正在尝试提供一个SEARCH工具,它允许我选择人名包含SEARCH名称的所有树项。看到这个屏幕截图,虽然第一个项目与RAJA匹配但未选中。

enter image description here

现在,当我再次点击“定位”按钮时,选项正确,如您所见。

enter image description here

这是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);

}

0 个答案:

没有答案