2017-12-29 38 views
1

문제는 내가 갇혀있어 특정 자식 하위 축소/확장, 모든 TreeView 노드/부모 축소 할 수있는 TreeView 노드를 가져 오는 것입니다. 나는 커다란 실패로 재귀를 시도했고 그 해결책이 무엇인지 깨닫지 못했다.JavaFX 만 확장 TreeView 특정 하위 노드가 포함 된 부모

public void setTreeItem(Employee emp, TreeItem<Employee> root_tree) { 
    if (emp.equals(root_tree.getValue())) { 
     root_tree.setExpanded(false); 
    } else { 
     root_tree.setExpanded(true); 
     for (TreeItem<Employee> emps : root_tree.getChildren()) { 
      setTreeItem(emp, emps); 
     } 
    } 
} 

나는이 점에 도착하고 더 이상 갈 수 없어 : 여기

내 코드를 살펴입니다. 참고로, 나는이 topic을 체크 아웃했지만 실제로 그 해결책에서 아이디어를 얻을 수 없었다.

first picture

이 특정 요소

second picture

을 점검하기 전에 사진이며,이 특정 요소에 대해 확인 후 사진을 것입니다 (메리 존슨 :

데모에 대한 사진입니다).

당신이 볼 수 있듯이 전체 TreeView를 통과하고 모든 TreeView 부모를 확장하지만 결국 Mary Johnson은 존재하지 않습니다.

+0

당신이하려고하는 것을 명확히 할 수 있습니까? 당신의 (불리한 이름의)'setTreeItem' 메소드를 호출 한 후에 트리의 상태는 어떻게되어야합니까? 루트에서 제공된 값을 포함하는 항목까지의 경로 만 확장해야하며 다른 모든 항목은 축소해야합니까? 또는 다른 것? –

답변

0

검색하는 항목이 항목의 하위 항목이 아니더라도 비 종단의 경우 TreeItem을 확장합니다. 당신이 전체 트리를 가로 지르고 있기 때문에 모든 노드가 확장됩니다. 반환 값이 제공 피드백을 해결하려면 :

public boolean setTreeItem(Employee emp, TreeItem<Employee> root_tree) { 
    if (emp.equals(root_tree.getValue())) { 
     root_tree.setExpanded(false); 
     return true; 
    } else { 
     for (TreeItem<Employee> emps : root_tree.getChildren()) { 
      if (setTreeItem(emp, emps)) { 
       // expand & return true, if item is a descendant of the current item 
       root_tree.setExpanded(true); 
       return true; 
      } 
     } 
     return false; // set expanded to false before returning here? 
    } 
} 

를 대신 true/false을 반환하는 당신은 또한 TreeItem 당신이 검색하거나 null 및 루프에서 나중에 항목을 확장 값을 포함 반환 할 수

TreeItem<String> item = searchItem(someString, root); 
if (item != null) { 
    item.setExpanded(false); 
    item = item.getParent(); 
    while (item != null) { 
     item.setExpanded(true); 
     item = item.getParent(); 
    } 
} 
+0

정말 고마워요! 그것은 위대한 작품. –