Come aggiungere etichette di vertice personalizzate nella visualizzazione del grafico Jung?

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

  •  27-10-2019
  •  | 
  •  

Domanda

Come utilizzare le etichette del vertice personalizzato in Jung Visualizzazione del grafico?

Sto seguendo Tutorial Jung 2.0 dove l'ho trovato setVertexLabelTransformer() Può essere usato per etichettare i vertici, ma queste etichette non possono essere personalizzate, per quanto ne sappia.

Ad esempio, il codice seguente produce tre vertici, con il parto di vertice 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);       
    }
}

Come posso aggiungere etichette come "Q0"?

È stato utile?

Soluzione

Dato che hai definito i generici di SparseMultigraph<V, E> come SparseMultigraph<Integer, String> dove il generico V per Vertex come intero e il generico e per bordo come String, quindi il valore dell'etichetta di ogni vertice è in Integer e ogni etichetta di Edge in String. Quindi, se si desidera ogni vertice con nomi come Q1, V2, ecc. String per generico V, quindi puoi passare un nome di vertice come questo g.addVertex("q1");

Altri suggerimenti

Se hai una classe personalizzata per i nodi, darò un esempio dal mio progetto. Ho un nodo di classe che è come:

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()
{
}

}

// Devi solo sovrascrivere la trasformazione come sotto:

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

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

// Mostrerà la proprietà ScreenName come etichetta per ciascun nodo nel grafico. // Spero che sia ciò che stai cercando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top