2008-09-25 7 views
5

I ont mis en œuvre ce graphique:poids Voir dans JGraphT

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

Afin de montrer ce que le nom de la classe dit; un graphe pondéré dirigé simple écoutable. Je souhaite modifier l'étiquette des bords et au lieu du format

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

Je veux montrer le poids du bord. Je réalise que toutes les actions sur les nœuds, par ex. la méthode getEdgesWeight(), sont déléguées à partir du graphique et non du bord. Comment puis-je montrer le poids du bord? Est-ce que je dois passer dans le graphique au bord en quelque sorte?

Toute aide est appréciée.

Répondre

2

Je suppose que la MyWeightedEdge de classe contient déjà une méthode telle que

public void setWeight(double weight) 

Si tel est le cas, alors ce que vous devez faire est:

Derive votre propre sous-classe de ListenableDirectedWeightedGraph (par exemple, ListenableDirectedWeightedGraph). J'ajouterais les deux versions du constructeur, déléguant à "super" pour assurer la compatibilité avec la classe d'origine.

Créer le graphique comme dans votre question, mais en utilisant la nouvelle classe

ListenableDirectedWeightedGraph g = 
    new CustomListenableDirectedWeightedGraph(
     MyWeightedEdge.class); 

Remplacer la méthode setEdgeWeight comme suit:

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

Et, last but not least, remplacer le toString méthode de la classe MyWeightedEdge pour renvoyer l'étiquette que vous voulez que la bordure ait (en incluant probablement le poids, qui est maintenant disponible).

J'espère que cela aide.

+0

user5915 n'a pas mentionné ce qu'il utilisait pour visualiser son graphique mais je suppose que c'était jgraph. C'est comme si tu lui disais d'écrire sa propre bibliothèque O.o – Khoi