0

我正在尝试在 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);
}
}
4

0 回答 0