Es sieht aus, dass Sie einige wichtige Details aus Ihrer Frage sind verlassen, und ohne Minimal, Complete, and Verifiable example ist es schwer zu sagen, wo das Problem ist.
Beachten Sie jedoch, dass die Probe, die Sie übernehmen möchten, sehr alt ist. JGraph
ist weitergegangen auf JGraphX
. Stellen Sie sich das folgende Beispiel vor, das die Verknüpfung von und JGraphX
unter Verwendung von JGraphXAdapter
veranschaulicht.
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import org.jgrapht.ListenableGraph;
import org.jgrapht.ext.JGraphXAdapter;
import org.jgrapht.graph.DefaultWeightedEdge;
import org.jgrapht.graph.ListenableDirectedWeightedGraph;
import com.mxgraph.layout.mxCircleLayout;
import com.mxgraph.layout.mxIGraphLayout;
import com.mxgraph.swing.mxGraphComponent;
public class DemoWeightedGraph {
private static void createAndShowGui() {
JFrame frame = new JFrame("DemoGraph");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ListenableGraph<String, MyEdge> g = buildGraph();
JGraphXAdapter<String, MyEdge> graphAdapter =
new JGraphXAdapter<String, MyEdge>(g);
mxIGraphLayout layout = new mxCircleLayout(graphAdapter);
layout.execute(graphAdapter.getDefaultParent());
frame.add(new mxGraphComponent(graphAdapter));
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
public static class MyEdge extends DefaultWeightedEdge {
@Override
public String toString() {
return String.valueOf(getWeight());
}
}
public static ListenableGraph<String, MyEdge> buildGraph() {
ListenableDirectedWeightedGraph<String, MyEdge> g =
new ListenableDirectedWeightedGraph<String, MyEdge>(MyEdge.class);
String x1 = "x1";
String x2 = "x2";
String x3 = "x3";
g.addVertex(x1);
g.addVertex(x2);
g.addVertex(x3);
MyEdge e = g.addEdge(x1, x2);
g.setEdgeWeight(e, 1);
e = g.addEdge(x2, x3);
g.setEdgeWeight(e, 2);
e = g.addEdge(x3, x1);
g.setEdgeWeight(e, 3);
return g;
}
}
anzumerken, dass MyEdge
DefaultWeightedEdge
benutzerdefinierte toString()
das Kantengewicht zeigt bereitzustellen erstreckt. Eine sauberere Lösung wäre wahrscheinlich, mxGraph.convertValueToString
zu überschreiben, den Inhalt von Zellen zu untersuchen und benutzerdefinierte Etiketten nach Bedarf bereitzustellen. toString
ist eine Abkürzung für die Demo und auch ich habe festgestellt, dass DefaultWeightedEdge.getWeight()
geschützt ist, so dass die Erweiterung sowieso benötigt wird :)