2010-07-20 25 views
6

ho scritto un po 'di classe grafico visualizzatore:Vertex etichetta nel JUNG visualizzazione grafico

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);     
} 

Come posso aggiungere etichette per i vertici e spigoli? I valori sono memorizzati nella mia classe vertex personalizzata. Posso scorrere tutti i vertici nel layout o BasicVisualizationServer e aggiungere etichette?

Grazie per il vostro aiuto!

risposta

8

è necessario chiamare un trasformatore un'etichetta per il vertex/bordo:

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

Questo è qualcosa che si può trovare abbastanza spesso nei campioni. Usa il metodo toString() della classe vertex per specificare l'etichetta.

Un esempio un po 'più coinvolti:

 vv.getRenderContext().setEdgeLabelTransformer(new Transformer<MyEdge, String>() { 
      public String transform(MyEdge e) { 
       return (e.toString() + " " + e.getWeight() + "/" + e.getCapacity()); 
      } 
     }); 

Non è necessario per scorrere i bordi; EdgeLabelTransformer o VertexLabelTransformer etichettano i bordi come e quando le loro proprietà sono aggiornate e VisualizationViewer li aggiornerà al volo.