All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edu.uci.ics.jung.samples.GraphFromGraphMLDemo Maven / Gradle / Ivy

Go to download

Sample programs using JUNG. Nearly all JUNG capabilities are demonstrated here. Please study the source code for these examples prior to asking how to do something.

The newest version!
/*
 * Copyright (c) 2003, The JUNG Authors
 * All rights reserved.
 * 
 * This software is open-source under the BSD license; see either "license.txt"
 * or https://github.com/jrtom/jung/blob/master/LICENSE for a description.
 * 
 */
package edu.uci.ics.jung.samples;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;

import com.google.common.base.Function;
import com.google.common.base.Supplier;

import edu.uci.ics.jung.algorithms.layout.FRLayout;
import edu.uci.ics.jung.graph.DirectedGraph;
import edu.uci.ics.jung.graph.DirectedSparseMultigraph;
import edu.uci.ics.jung.io.GraphMLReader;
import edu.uci.ics.jung.visualization.GraphZoomScrollPane;
import edu.uci.ics.jung.visualization.VisualizationViewer;
import edu.uci.ics.jung.visualization.control.AbstractModalGraphMouse;
import edu.uci.ics.jung.visualization.control.CrossoverScalingControl;
import edu.uci.ics.jung.visualization.control.DefaultModalGraphMouse;
import edu.uci.ics.jung.visualization.control.GraphMouseListener;
import edu.uci.ics.jung.visualization.control.ScalingControl;
import edu.uci.ics.jung.visualization.decorators.ToStringLabeller;
import edu.uci.ics.jung.visualization.renderers.GradientVertexRenderer;
import edu.uci.ics.jung.visualization.renderers.Renderer;
import edu.uci.ics.jung.visualization.renderers.BasicVertexLabelRenderer.InsidePositioner;


/**
 * Demonstrates loading (and visualizing) a graph from a GraphML file.
 * 
 * @author Tom Nelson
 * 
 */
public class GraphFromGraphMLDemo {

    /**
     * the visual component and renderer for the graph
     */
    VisualizationViewer vv;
    
    /**
     * Creates an instance showing a simple graph with controls to demonstrate the zoom features.
     * @param filename the file containing the graph data we're reading
     * @throws ParserConfigurationException if a SAX parser cannot be constructed
     * @throws SAXException if the SAX parser factory cannot be constructed
     * @throws IOException if the file cannot be read
     */
    public GraphFromGraphMLDemo(String filename) throws ParserConfigurationException, SAXException, IOException {
        
    	Supplier vertexFactory = new Supplier() {
    		int n = 0;
    		public Number get() { return n++; }
    	};
    	Supplier edgeFactory = new Supplier() {
    		int n = 0;
    		public Number get() { return n++; }
    	};
    	
    	GraphMLReader, Number, Number> gmlr = 
    	    new GraphMLReader, Number, Number>(vertexFactory, edgeFactory);
    	final DirectedGraph graph = new DirectedSparseMultigraph();
    	gmlr.load(filename, graph);
    	
        // create a simple graph for the demo
        vv =  new VisualizationViewer(new FRLayout(graph));

        vv.addGraphMouseListener(new TestGraphMouseListener());
        vv.getRenderer().setVertexRenderer(
        		new GradientVertexRenderer(
        				Color.white, Color.red, 
        				Color.white, Color.blue,
        				vv.getPickedVertexState(),
        				false));
        
        // add my listeners for ToolTips
        vv.setVertexToolTipTransformer(new ToStringLabeller());
        vv.setEdgeToolTipTransformer(new Function() {
			public String apply(Number edge) {
				return "E"+graph.getEndpoints(edge).toString();
			}});
        
        vv.getRenderContext().setVertexLabelTransformer(new ToStringLabeller());
        vv.getRenderer().getVertexLabelRenderer().setPositioner(new InsidePositioner());
        vv.getRenderer().getVertexLabelRenderer().setPosition(Renderer.VertexLabel.Position.AUTO);
        
        // create a frome to hold the graph
        final JFrame frame = new JFrame();
        Container content = frame.getContentPane();
        final GraphZoomScrollPane panel = new GraphZoomScrollPane(vv);
        content.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final AbstractModalGraphMouse graphMouse = new DefaultModalGraphMouse();
        vv.setGraphMouse(graphMouse);
        vv.addKeyListener(graphMouse.getModeKeyListener());

        JMenuBar menubar = new JMenuBar();
        menubar.add(graphMouse.getModeMenu());
        panel.setCorner(menubar);

        
        vv.addKeyListener(graphMouse.getModeKeyListener());
        vv.setToolTipText("
Type 'p' for Pick mode

Type 't' for Transform mode"); final ScalingControl scaler = new CrossoverScalingControl(); JButton plus = new JButton("+"); plus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scaler.scale(vv, 1.1f, vv.getCenter()); } }); JButton minus = new JButton("-"); minus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { scaler.scale(vv, 1/1.1f, vv.getCenter()); } }); JPanel controls = new JPanel(); controls.add(plus); controls.add(minus); content.add(controls, BorderLayout.SOUTH); frame.pack(); frame.setVisible(true); } /** * A nested class to demo the GraphMouseListener finding the * right vertices after zoom/pan */ static class TestGraphMouseListener implements GraphMouseListener { public void graphClicked(V v, MouseEvent me) { System.err.println("Vertex "+v+" was clicked at ("+me.getX()+","+me.getY()+")"); } public void graphPressed(V v, MouseEvent me) { System.err.println("Vertex "+v+" was pressed at ("+me.getX()+","+me.getY()+")"); } public void graphReleased(V v, MouseEvent me) { System.err.println("Vertex "+v+" was released at ("+me.getX()+","+me.getY()+")"); } } /** * @param args if this contains at least one element, the first will be used as the file to read * @throws ParserConfigurationException if a SAX parser cannot be constructed * @throws SAXException if the SAX parser factory cannot be constructed * @throws IOException if the file cannot be read */ public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { String filename = "simple.graphml"; if(args.length > 0) filename = args[0]; new GraphFromGraphMLDemo(filename); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy