【发布时间】:2014-05-08 19:39:00
【问题描述】:
我是 Jung 的新手。我需要可视化包含严重节点的树。使用 DelegateForest 类型的图形和 TreeLayout 一切正常。但是,在添加边时,如果将边添加到树中已经存在的图中,代码会遇到异常。异常是:“线程“主”java.lang.IllegalArgumentException 中的异常:树不能已经包含子 x”。换句话说,如果添加的边包含图中已经存在的顶点,则会引发上述异常。以下示例代码演示了这一点:
Forest<Integer, String> g2 = new DelegateForest<Integer, String>();
g2.addVertex((Integer) 1);
g2.addVertex((Integer) 2);
g2.addVertex((Integer) 3);
g2.addVertex((Integer) 4);
g2.addVertex((Integer) 5);
g2.addEdge("Edge-1-3", 1, 3);
g2.addEdge("Edge-2-3-P", 2, 3);
g2.addEdge("Edge-4-3-P", 4, 3);
g2.addEdge("Edge-4-5-P", 4, 5);
g2.addEdge("Edge-3-5-P", 3, 5);
Layout<Integer, String> layout = new TreeLayout<Integer, String>(g2);
VisualizationViewer<Integer, String> vv = new VisualizationViewer<Integer, String>(layout);
vv.setPreferredSize(new Dimension(800, 600));
vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
vv.getRenderContext().setEdgeLabelTransformer(new ToStringLabeller());
vv.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);
JFrame frame = new JFrame("Simple Graph View");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(vv);
frame.pack();
frame.setVisible(true);
在"g2.addEdge("Edge-3-5-P", 3, 5);"这一行抛出异常
所以我知道我必须使用图形类型 SparseMultigraph。不幸的是,没有一种布局看起来像可以与 SparseMultigraph 一起使用的 TreeLayout。你能告诉我如何解决我的问题吗?
非常感谢!
【问题讨论】:
-
您不能将 TreeLayout 用于不是树的图(并且当您添加边 3-5 时,图 is 不再是树)。您可以考虑使用不同的布局,例如 SpringLayout 或 FRLayout...