【问题标题】:JUNG Graph: TreeLayout for SparseMultigraphJUNG Graph:SparseMultigraph 的 TreeLayout
【发布时间】: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...

标签: java graph jung


【解决方案1】:

以上评论是正确的。也就是说,您可以从图中提取生成树,使用 TreeLayout 对其进行布局,然后使用这些位置来延续整个 Graph。 minimumspanningtree 布局演示演示了这一点。

【讨论】:

    【解决方案2】:

    当您将孩子添加到一个父母并将同一个孩子添加到另一个父母时会发生此异常,就像您的情况一样

    g2.addEdge("Edge-4-5-P", 4, 5); g2.addEdge("Edge-3-5-P", 3, 5);

    尝试添加唯一的孩子。特别是在 TreeLayout 中。尝试另一个布局,但我还没有尝试过另一个布局。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多