Search code examples
javaswingjungvisualizer

How to add custom vertex labels in JUNG graph visualization?


How to use custom vertex labels in JUNG graph visualization?

I am following Jung 2.0 Tutorial where I found that setVertexLabelTransformer() can be used to label the vertices, but these labels cannot be customized, to my knowledge.

For example, the below code produces three vertices, having vertex-labels 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);       
    }
}

How do I add labels like "q0"?


Solution

  • Since you have defined the generics of SparseMultigraph<V, E> as SparseMultigraph<Integer, String> where the generic V for vertex as Integer and the generic E for edge as String, hence each vertex's label value is in Integer and each edge's label in String. So, if you want each vertex by names like q1, v2, etc., use String for generic V, so you can pass a vertex name like this g.addVertex("q1");