¿Cómo agregar etiquetas de vértice personalizadas en la visualización del gráfico Jung?

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

  •  27-10-2019
  •  | 
  •  

Pregunta

Cómo usar etiquetas de vértices personalizadas en Junk visualización de gráficos?

Estoy siguiendo Tutorial de Jung 2.0 donde encontré que setVertexLabelTransformer() Se puede usar para etiquetar los vértices, pero estas etiquetas no se pueden personalizar, que yo sepa.

Por ejemplo, el siguiente código produce tres vértices, que tienen vértices 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);       
    }
}

¿Cómo agrego etiquetas como "Q0"?

¿Fue útil?

Solución

Ya que ha definido los genéricos de SparseMultigraph<V, E> como SparseMultigraph<Integer, String> donde el genérico V para el vértice como entero y el genérico e para borde como String, por lo tanto, el valor de la etiqueta de cada vértice está en Integer y la etiqueta de cada borde en String. Entonces, si desea cada vértice por nombres como Q1, V2, etc., use String para genérico V, para que puedas pasar un nombre de vértice como este g.addVertex("q1");

Otros consejos

Si tiene una clase personalizada para nodos, daré un ejemplo de mi proyecto. Tengo un nodo de clase que es como:

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

}

// Solo necesita anular la transformación como a continuación:

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

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

// Mostrará la propiedad del nombre de pantalla como una etiqueta para cada nodo en el gráfico. // Espero que esto sea lo que estás buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top