2008-09-25 11 views
5

ich diese Grafik umgesetzt haben:anzeigen Gewichte in JGraphT

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

Um zu zeigen, was die Klasse Name schon sagt; ein einfacher hörbarer gewichteter Graph. Ich möchte das Etikett der Ränder ändern und statt des Formats

return "(" + source + " : " + target + ")"; 

Ich will es das Gewicht der Kante zeigen. Ich erkenne, dass alle Aktionen an den Knoten, z.B. die getEdgesWeight() Methode, werden von der Grafik und nicht von der Kante delegiert. Wie kann ich das Gewicht der Kante anzeigen? Muss ich den Graph irgendwie an den Rand übergeben?

Jede Hilfe wird geschätzt.

Antwort

2

Ich gehe davon aus, dass die Klasse MyWeightedEdge enthält bereits ein Verfahren wie

public void setWeight(double weight) 

Wenn dies tatsächlich der Fall ist, dann, was Sie tun müssen, ist:

leite deine eigene Unterklasse von ListenableDirectedWeightedGraph (z. B. ListenableDirectedWeightedGraph). Ich würde beide Konstruktorversionen hinzufügen und an "super" delegieren, um die Kompatibilität mit der ursprünglichen Klasse sicherzustellen.

Erstellen Sie das Diagramm wie in Ihrer Frage, aber mit der neuen Klasse

ListenableDirectedWeightedGraph g = 
    new CustomListenableDirectedWeightedGraph(
     MyWeightedEdge.class); 

Überschreiben Sie die Methode setEdgeWeight wie folgt:

public void setEdgeWeight(E e, double weight) { 
    super.setEdgeWeight(e, weight); 
    ((MyWeightedEdge)e).setWeight(weight); 
} 

Und last but not least, überschreiben die toString Methode der Klasse MyWeightedEdge, um das Etikett zurückzugeben, das die Kante haben soll (vermutlich einschließlich des Gewichts, das ist jetzt verfügbar).

Ich hoffe, das hilft.

+0

user5915 hat nicht erwähnt, was er verwendet, um seine Grafik zu visualisieren, aber ich nehme an, es war jgraph. Es ist, als ob du ihm sagst, dass er seine eigene Bibliothek O.o schreiben soll – Khoi