Wie füge ich benutzerdefinierte Vertex -Etiketten in der Jung -Graph -Visualisierung hinzu?

StackOverflow https://stackoverflow.com/questions/9350583

  •  27-10-2019
  •  | 
  •  

Frage

So verwenden Sie benutzerdefinierte Scheitelpunktbezeichnungen in Jung Graph Visualisierung?

Ich folge Jung 2.0 Tutorial wo ich das gefunden habe setVertexLabelTransformer() Kann verwendet werden, um die Eckpunkte zu kennzeichnen, aber diese Etiketten können meines Wissens nicht angepasst werden.

Zum Beispiel erzeugt der folgende Code drei Scheitelpunkte mit Scheitelpunktkörpern 1,2,4:

import edu.uci.ics.jung.algorithms.layout.CircleLayout;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.SparseMultigraph;
import edu.uci.ics.jung.visualization.BasicVisualizationServer;
import java.awt.Dimension;
import javax.swing.JFrame;

public class SimpleGraphView {
    Graph<Integer, String> g;

    public SimpleGraphView() {       
        g = new SparseMultigraph<Integer, String>();
        g.addVertex((Integer)1);
        g.addVertex((Integer)2);
        g.addVertex((Integer)4); 
    }

    public static void main(String[] args) {
        SimpleGraphView sgv = new SimpleGraphView(); 
        Layout<Integer, String> layout = new CircleLayout(sgv.g);
        layout.setSize(new Dimension(800,800));  
        BasicVisualizationServer<Integer,String> vv =
            new BasicVisualizationServer<Integer,String>(layout);
        vv.setPreferredSize(new Dimension(850,850)); 

        JFrame frame = new JFrame("Simple Graph View");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(vv); 
        frame.pack();
        frame.setVisible(true);       
    }
}

Wie füge ich Etiketten wie "Q0" hinzu?

War es hilfreich?

Lösung

Da haben Sie die Generika definiert SparseMultigraph<V, E> wie SparseMultigraph<Integer, String> wo der generische V Für Scheitelpunkt als Ganzzahl und das generische E für Edge als String, Daher ist der Etikettwert jedes Scheitelpunkts in Integer und jedes Edge -Etikett in String. Also, wenn Sie jeden Scheitelpunkt mit Namen wie Q1, V2 usw. verwenden möchten, verwenden Sie String für generische V, Sie können so einen Scheitelpunktnamen wie diesen übergeben g.addVertex("q1");

Andere Tipps

Wenn Sie eine benutzerdefinierte Klasse für Knoten haben, werde ich ein Beispiel aus meinem Projekt geben. Ich habe einen Klassenknoten, der wie:

public class Node 
{

public long tweetId = 0L;
public long nodeId = 0L;
public String screenName = "";
public Date reTweetDate = new Date();
public boolean isMainNode = false;
public int size = 0;

public Node()
{
}

}

// Sie müssen nur die Transformation wie unten überschreiben:

vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller() {
                @Override
                public String transform(Object v) {

                    return ((Node)v).screenName;
                }});

// Es wird die SCREENNAME -Eigenschaft als Beschriftung für jeden Knoten im Diagramm angezeigt. // Ich hoffe, dass du das suchst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top