Étiquette de sommet dans la visualisation du graphique Jung
-
17-09-2020 - |
Question
J'ai écrit une petite classe de visualiseur graphique:
public void simpleGraph(SparseMultigraph<Vertex,SEdge> graph, String name) {
Layout<Vertex, SEdge> layout = new ISOMLayout(graph);
layout.setSize(new Dimension(800,800));
BasicVisualizationServer<Vertex, SEdge> vv = new BasicVisualizationServer<Vertex, SEdge>(layout);
vv.setPreferredSize(new Dimension(850,850)); //Sets the viewing area size
JFrame frame = new JFrame(name);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(vv);
frame.pack();
frame.setVisible(true);
}
Comment puis-je ajouter des étiquettes pour les sommets et les bords?Les valeurs sont stockées dans ma classe Vertex personnalisée.Puis-je itération sur tous les sommets dans la mise en page ou la basevisualizationerver et ajouter des étiquettes?
Merci pour votre aide!
La solution
Vous devez appeler un transformateur d'étiquettes pour votre sommet / bord:
vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
C'est quelque chose que vous trouverez assez souvent dans les échantillons.Il utilise la méthode Tostring () de votre classe Vertex pour spécifier l'étiquette.
Un exemple légèrement plus impliqué:
vv.getRenderContext().setEdgeLabelTransformer(new Transformer<MyEdge, String>() {
public String transform(MyEdge e) {
return (e.toString() + " " + e.getWeight() + "/" + e.getCapacity());
}
});
Vous n'avez pas besoin de itération sur les bords;L'EDGELABELTRANSFORMER OU VERTEXLABELTRANSFORMER émettra vos bords comme et lorsque leurs propriétés sont mises à jour et que la visualisationViewer les mettra à jour à la volée.