我正在做一个由JUNG2绘制的网络拓扑项目,现在发现JUNG2不能在不同的顶点上绘制相同的边(名)。并报告如下:
Exception in thread "main" java.lang.IllegalArgumentException: edge GigabitEthernet0/3<--->GigabitEthernet0/0/0/0 already exists in this graph with endpoints <HKBR1, HKBR3> and cannot be added with endpoints <HKBR2, HKBR4>
at edu.uci.ics.jung.graph.AbstractGraph.getValidatedEndpoints(AbstractGraph.java:93)
at edu.uci.ics.jung.graph.SparseMultigraph.addEdge(SparseMultigraph.java:123)
at edu.uci.ics.jung.graph.AbstractGraph.addEdge(AbstractGraph.java:60)
at pkg.DrawnTopology.DrawnTopology(DrawnTopology.java:45)
at pkg.ReadLine.main(ReadLine.java:85)我把所有的边缘和顶点都存储到一个二维数组中。二维数组数据从不同的文件中学习,因此数据是动态的.由于网络拓扑结构可能有相同的边名,那么如何解决呢?
发布于 2015-05-28 06:35:00
从技术上讲,边名必须是唯一的,但您可以操作图形中显示的内容。为了获得边的唯一名称,我对边的名称使用了以下模式: fromVertex_edgeName_toVertex。
然后你需要一个EdgeLabelTransformer
private class EdgeLabelTransformer<V> implements Transformer<V, String> {
@Override
public String transform(V v) {
return v.toString().substring(v.toString().indexOf("_") + 1, v.toString().lastIndexOf("_"));
}
}这个转换器实际上告诉VisualViewer要显示什么。因此,在我的例子中,它只显示中间部分,结果是您可以在图中有多个边,具有相同的显示名称。
加入这样的变压器:
visualViewer.getRenderContext().setEdgeLabelTransformer(new EdgeLabelTransformer<String>());https://stackoverflow.com/questions/30495517
复制相似问题