簡體   English   中英

JUNG,在可視化查看器上更改圖形參考

[英]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)但避免錯誤!

第二個錯誤是可視化查看器無法識別新圖中的節點,因此您必須比較節點名稱並從舊節點獲取位置才能正確處理

我認為這根本沒有幫助。
只需記住直接添加PDEEdgesNodes ,而不要通過ArrayList ;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM