[英]JUNG, changing the graph reference on a visualization viewer
我們使用jung開發了一個小型圖形編輯器,您可以在其中用鼠標繪制圖形/網絡。 我們使用VisualizationViewer作為繪制面板。 VisualizationViewer包含必須通過其包含的GraphLayout顯示的圖形。 我們還有一個保存功能,可以將圖形保存到文本文件中:
public void saveGraph(){
Graph<V, E> g = visualizationviewer.getGraphLayout.getGraph();
// save g into text file
}
現在,我編寫了一個類,該類使用一些算法為我生成了一個新的圖形對象:
public Graph<V, E> generateGraph(){
Graph<V, E> g = new DirectedSparseGraph<V, E>();
// do some algorithms on g
return g
}
如果現在我想通過以下方式顯示生成的圖形:
...
visualisationviewer.getGraphLayout.setGraph(generateGraph());
...
新的圖形完美顯示,並且可以進一步使用它。
但是,保存功能(以及所有其他希望使用VisualizationViewer的基礎Graph對象的功能)現在無法正常工作。 只能識別一個節點,或者不識別任何節點(這將導致NullPointerException)。 每當我們想要檢索底層的Graph數據結構時,我們都會使用:
visualizationviewer.getGraphLayout.getGraph();
我在這里缺少什么嗎? 還是在框架內存在尚未解決的已知錯誤? 光學部分工作正常,而以編程方式檢索基礎對象卻沒有,這似乎很奇怪。
問題在於,分兩步添加了頂點,方法是arrayList
頂點添加到arrayList
然后從該列表添加到圖。 由於您的程序是動態工作的,以避免出現空指針異常,因此您必須添加以下節點:
Node node;
g.addVertex(node = nodefactory.create());
nodes.add(node);
這樣,您仍然可以使用arrayList(nodes)
但避免錯誤!
第二個錯誤是可視化查看器無法識別新圖中的節點,因此您必須比較節點名稱並從舊節點獲取位置才能正確處理
我認為這根本沒有幫助。
只需記住直接添加PDEEdges
和Nodes
,而不要通過ArrayList
;-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.