我们用 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());
...
新的 Graph 显示完美,可以进一步绘制。
但保存功能(以及所有其他想要使用 VisualizationViewer 的底层 Graph 对象的功能)现在不再正常工作。要么只有一个节点被识别,要么没有节点(这会导致 NullPointerException)。每次我们想要检索我们使用的底层 Graph 数据结构时:
visualizationviewer.getGraphLayout.getGraph();
我这里缺少什么吗?或者框架内是否存在尚未修复的已知错误?光学部分工作正常,而底层对象的编程检索却不是,这似乎很奇怪。
最佳答案
问题是您分两步添加了顶点,首先将它们添加到 arrayList
中,然后从该列表添加到图中。由于您的程序动态运行以避免空指针异常,因此您必须像这样添加节点:
Node node;
g.addVertex(node = nodefactory.create());
nodes.add(node);
这样你仍然可以使用你的 arrayList(nodes)
但避免错误!
第二个错误是可视化查看器无法识别新图形中的节点,因此您必须比较节点的名称并从旧节点获取位置才能正确
我认为这根本没有帮助..
请记住直接添加 PDEEdges
和 Nodes
而不是通过 ArrayList
;-)
关于java - JUNG,在可视化查看器上更改图形引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8287145/