2012-02-19 20 views
5

¿Cómo usar etiquetas de vértices personalizados en la visualización del gráfico JUNG?¿Cómo agregar etiquetas de vértices personalizados en la visualización de gráficos JUNG?

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

Por ejemplo, el código de abajo produce tres vértices, que tienen vértices 1,2,4-etiquetas:

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 puedo añadir etiquetas como "q0"?

+1

Por favor, cite el tutorial que estás siguiendo. Ver también [* Initial Threads *] (http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html). – trashgod

+1

Dado que ha definido los genéricos de 'SparseMultigraph ' como 'SparseMultigraph ' donde el V genérico para el vértice como entero y el E genérico para el borde como cadena, por lo tanto el valor de la etiqueta de cada vértice está en entero y la etiqueta de cada borde en String. Por lo tanto, si desea que cada vértice tenga nombres como q1, v2, etc., use String para V genérica, de modo que pueda pasar un nombre de vértice como este 'g.addVertex (" q1 ");' – ecle

+0

Para cambiar el transformador de etiqueta de vértice predeterminado en un contexto de representación JUNG, busque la palabra clave 'getRenderContext(). setVertexLabelTransformer' – ecle

Respuesta

5

Puesto que usted ha definido los genéricos de SparseMultigraph<V, E> como SparseMultigraph<Integer, String> donde el genérico V para vértice como entero y el genérico E para el borde como String, por lo tanto, valor de la etiqueta de cada vértice es en Integer y la etiqueta de cada borde en String. Por lo tanto, si desea que cada vértice por nombres como Q1, v2, etc., utilice String por medicamentos genéricos V, por lo que puede pasar un nombre de vértice como esto g.addVertex("q1");

3

Si usted tiene una clase personalizada para los nodos, voy a dar una 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() 
{ 
} 

} 

// Sólo tiene que sustituir a transformar, como a continuación:

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

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

// Se mostrará la propiedad screenName como una etiqueta para cada nodo en el grafico. // Espero que esto sea lo que está buscando.

Cuestiones relacionadas