2010-07-20 9 views
6

J'ai écrit une classe petit graphique de Visualizer:étiquette Vertex dans la visualisation graphique JUNG

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 arêtes? Les valeurs sont stockées dans ma classe vertex personnalisée. Puis-je parcourir tous les sommets dans Layout ou BasicVisualizationServer et ajouter des étiquettes?

Merci pour votre aide!

Répondre

8

Vous devez appeler un transformateur d'étiquettes pour votre sommet/bord:

 vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller()); 

C'est quelque chose que vous pouvez trouver assez souvent dans les échantillons. Il utilise la méthode toString() de votre classe de vertex pour spécifier l'étiquette.

Un exemple un peu 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 d'itérer sur les bords; EdgeLabelTransformer ou VertexLabelTransformer vont étiqueter vos bords au fur et à mesure que leurs propriétés sont mises à jour, et VisualizationViewer les mettra à jour à la volée.

Questions connexes