2014-07-12 4 views
1

내가 ObservableLists의 ObservableLists의 ObservableList을 가지고있는 트 리뷰 ... 그것은 기본적으로 아래 4 단계를 진행대해 여러 개의 중첩 된 ObservableLists

동기화.

목표

목적의 목록이

전략의 목록이 보이는,

분명히 작업을

전술의 목록이

의 목록을 가지고있다 이 데이터를 표시하는 TreeView 설정에 대한 완벽한 시나리오. 어떻게 그렇게 구조에서 만든 모든 변경 사항이 TreeView에 표시됩니다 그렇게 할 수 있습니까?

목표가 루트 노드라고 생각합니다. 목표가 목록에 추가 될 때마다 목표를 듣고 목표가 방금 생성되었음을 알릴 수 있습니다. 어떻게 그리고 어디에서이 청취자를 설정해야합니까? 나는 목표에 경고합니까? 또는 일부 정적 유틸리티 클래스 TreeView 업데이트하려면 경고합니까?

답변

1

ObservableList를 사용하고 Listener를 추가하면 쉽게 할 수 있습니다.

목표에 리스너를 추가한다고 가정합니다. 그러면 Objective의 몇 가지 변경 사항을 살펴볼 것입니다. 변경 사항이 발생하면 (예를 들어 Objective가 추가 된 경우) 특정 목표 (예 : Map)를 사용하는 TreeItem을 대상으로 지정한 다음 하위 항목을 추가합니다.

물론 당신은 같은 몇 가지 방법을함으로써 작업을 간소화 할 수 있습니다 :

private void addObjective(TreeItem<Object> specificGoal, List<Strategy > objective){ 
    TreeItem<Object> objectiveTreeItem = new TreeItem<>(objective); 

    for(List<Tactic> strategy: objective){ 
     addStrategy(objectiveTreeItem, strategy); 
    } 
    specificGoal.getChildren().add(objectiveTreeItem); 
} 

레이어에 각각의 방법을 가졌어요.

물론 데이터 양이 적 으면 TreeView 항목을 지우고 업데이트 된 List를 사용하여 만든 메소드를 다시 실행할 수 있습니다. 단순하지만 최적화되지 않았습니다.

+0

각 ObservableLists에 리스너를 추가하여 TreeItem을 추가하고 제거 할 수있었습니다. 그러나 항목의 업데이트는 변경 리스너에 의해 포착되지 않습니다. Objective의 이름을 변경하면이 변경 사항도 TreeView에 반영됩니다. 그러나 어떻게? –

+0

청취자는 목록의 변경 사항 만 기록합니다. 항목 추가 또는 제거. 오브젝트 내부의 내용이 변경 될 때 대응하고 싶다면 이벤트 (http://docs.oracle.com/javafx/2/events/jfxpub-events.htm)를 살펴 보는 것이 좋습니다. 예를 들어 Objective의 이름을 변경하면 변경된 내용 등을 넣은 Event (사용자 정의 클래스 확장 이벤트)를 실행할 수 있습니다. 또는 Objective 클래스가 Javafx 속성 사용). – Maxoudela

+0

고마워요! 나는 그것을 사용하는 방법을 조사 할 것이다. –

관련 문제