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