2010-07-20 8 views
6

schrieb ich eine kleine Diagramm Visualizer Klasse:Vertex-Label in JUNG Graphvisualisierung

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

Wie kann ich Etiketten für Ecken und Kanten hinzu? Die Werte werden in meiner benutzerdefinierten Vertex-Klasse gespeichert. Kann ich über alle Vertices im Layout oder BasicVisualizationServer iterieren und Labels hinzufügen?

Danke für Ihre Hilfe!

Antwort

8

Sie benötigen ein Etikett Transformator für Ihren Scheitel/edge nennen:

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

Dieses etwas, das Sie ziemlich oft in den Proben finden würde. Es verwendet die toString() - Methode Ihrer Vertex-Klasse, um das Label anzugeben.

Eine etwas aufwendigere Beispiel:

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

Sie brauchen nicht über die Ränder zu durchlaufen; Der EdgeLabelTransformer oder VertexLabelTransformer beschriftet Ihre Kanten, wenn ihre Eigenschaften aktualisiert werden, und der VisualizationViewer aktualisiert sie im laufenden Betrieb.

Verwandte Themen