2013-06-22 9 views
2

내 그래프에 JUNG의 TreeLayout을 사용하고 있습니다. 사용자는 그래프를 변경할 수 있으며 변경 사항을 업데이트하고 표시해야합니다. 정 트리 레이아웃 동적 업데이트

내가 다시 그래프를 작성하는 업데이트를 사용하고 사용 레이아웃 설정하려면 : 이것은 그것이 있어야 무엇에 트리를 업데이트 않습니다

graph = new DelegateForest<String, Integer>(
      new DirectedOrderedSparseMultigraph<String, Integer>()); 
createGraph() //adds the vertices and edges to the graph 
layout.setGraph(graph); 
vv.repaint(); 

을하지만, 트리 레이아웃은 손실됩니다.

대부분의 노드는 올바른 위치에 나타나지만 리프 노드는 임의의 위치에 나타납니다. 처음으로 그래프를 만들 때 얻을 수있는 나무 구조를 되 찾을 수 있습니까?

+0

Jung의 'TreeLayout'이 정점을 HashMap (주문이 보장되지 않음)에 저장하기 때문에 순서가 잘못된 이유가 있다고 생각합니다. JUNG의'TreeLayout' 코드를 복사하고'TreeHashMaps' 코드로 바꾸면 제대로 작동 할 것입니다. – sdasdadas

+0

sdasdadas 올바르지 않습니다. 아래를 참조하십시오. –

답변

1

업데이트 된 그래프로 새 TreeLayout 인스턴스를 만들고 새 TreeLayout 인스턴스로 시각화를 업데이트해야합니다. 당신이 가지고있는 TreeLayout 인스턴스는 그것들에 대한 위치를 계산하지 않았기 때문에 임의의 장소에 새로운 노드가 생깁니다.

일부 그래프 업데이트 (추가 기능)의 경우보다 효율적으로 만들 수 있습니다. 하지만 지금은 우리 목록에 나와 있지 않습니다.

+0

'setGraph'가'TreeLayout'을 업데이트하지 않는 이유를 잘 모르겠습니다. 그것들은 모두'graph' 필드를 할당하고 그들은 모두'buildTree()'를 호출합니다. setGraph 메소드가하지 않는 생성자 만이 간격을 설정합니다. – sdasdadas

+0

조금 더 살펴 봤는데 당신 말이 맞습니다. 'TreeLayout'은 이미 배치 된 정점의'Set '을 유지하기 때문입니다. 두 번째가 있다면 레이아웃에 왜 'Set'이 필요한지 설명해 주시겠습니까? – sdasdadas