JUNG,在可视化查看器上更改图形参考

时间:2011-11-27 16:43:28

标签: java jung

我们已经开发了一个带有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();

我在这里缺少什么?或者框架中是否存在尚未修复的已知错误?在以编程方式检索底层对象时,光学部件工作正常,这似乎很奇怪。

1 个答案:

答案 0 :(得分:1)

问题在于,您首先将顶点添加到arrayList并添加到该列表中的图表,从而分两步添加顶点。由于您的程序是动态工作以避免空指针异常,因此您必须添加如下节点:

Node node;           
g.addVertex(node = nodefactory.create());
nodes.add(node);

这样您仍然可以使用arrayList(nodes),但可以避免错误!

第二个错误是可视化查看器无法识别新图中的节点,因此您必须比较节点的名称并从旧节点获取位置才能使其正确

我认为这根本没有帮助。
请注意直接添加PDEEdgesNodes,而不是ArrayList; - )