繁体   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