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