[英]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.