使用jgrapht java可视化加权图

时间:2014-08-19 12:48:59

标签: java graph visualization jgrapht

我正在尝试在java中建模加权和有向图。我正在使用jgraph和jgraphT库来完成它。通过阅读教程我设法模拟有向图,但我很困惑如何增加边缘的权重。事实上,使用“setEdgeWeight”,我可以做到,但我还需要在图表上可视化。谁知道怎么做?

以下是我的代码:

 ListenableDirectedWeightedGraph<String, DefaultWeightedEdge> g =
        new ListenableDirectedWeightedGraph<>(
            DefaultWeightedEdge.class);

    // create a visualization using JGraph, via the adapter
    jgAdapter = new JGraphModelAdapter<>(g);

    jgraph = new JGraph(jgAdapter);

    adjustDisplaySettings(jgraph);
    getContentPane().add(jgraph);
    resize(DEFAULT_SIZE);

    // add some hard-coded sample data (graph manipulated via JGraphT)
    //First the vertices
    g.addVertex("input page");
    g.addVertex("vertex1");
    g.addVertex("vertex2");
    g.addEdge("vertex2", "input page");
    g.addEdge("vertex1", "input page");

  g.setEdgeWeight(g.getEdge("vertex2", "input page"), 1000);

虽然代码分配了重量,但是当我尝试将其可视化时,我看到边缘没有重量标签。

 positionVertexAt("input page", 130, 40);
    positionVertexAt("vertex2", 150, 10);
    positionVertexAt("vertex1", 110, 70);

    adjustDisplaySettings(jgraph);
    getContentPane().add(jgraph);
    resize(DEFAULT_SIZE);

    JFrame frame = new JFrame();
    frame.getContentPane().add(jgraph);
    frame.setTitle("JGraphT Adapter to JGraph Demo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);

使用以下类,我可以生成一个静态的权重值。但我需要在扩展图形时动态生成权重。

public class MyWeightedEdge extends DefaultWeightedEdge {

public MyWeightedEdge() {
    super();
}

@Override
public String toString() {
    return Double.toString(2.0);
}
}

0 个答案:

没有答案