01/05/2015
// simple directed graph using jung framework
/* telecharger jung ici
http://sourceforge.net/projects/jung/?source=typ_redirect
*/
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Graphics;
import javax.swing.Icon;
import javax.swing.JFrame;
import org.apache.commons.collections15.Transformer;
import edu.uci.ics.jung.algorithms.layout.FRLayout;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.graph.DirectedSparseGraph;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.util.EdgeType;
import edu.uci.ics.jung.visualization.GraphZoomScrollPane;
import edu.uci.ics.jung.visualization.VisualizationViewer;
import edu.uci.ics.jung.visualization.decorators.ToStringLabeller;
public class Graphe {
/**
* the graph
*/
Graph graph;
/**
* the visual component and renderer for the graph
*/
VisualizationViewer vv;
Layout layout = null;
public Graphe() {
graph = new DirectedSparseGraph();
Integer[] v = createVertices(10);
createEdges(v);
layout = new FRLayout(graph);
vv = new VisualizationViewer(layout);
vv.getRenderContext().setVertexIconTransformer(
new Transformer() {
/*
* Implements the Icon interface to draw an Icon with
* background color and a text label
*/
public Icon transform(final Integer v) {
return new Icon() {
public int getIconHeight() {
return 20;
}
public int getIconWidth() {
return 20;
}
public void paintIcon(Component c, Graphics g,
int x, int y) {
if (vv.getPickedVertexState().isPicked(v)) {
g.setColor(Color.yellow);
} else {
g.setColor(Color.red);
}
g.fillOval(x, y, 20, 20);
if (vv.getPickedVertexState().isPicked(v)) {
g.setColor(Color.black);
} else {
g.setColor(Color.white);
}
g.drawString("" + v, x + 6, y + 15);
}
};
}
});
vv.setBackground(Color.white);
// add my listener for ToolTips
vv.setVertexToolTipTransformer(new ToStringLabeller());
// 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);
frame.pack();
frame.setVisible(true);
}
/**
* create some vertices
*
* count
* how many to create
* the Vertices in an array
*/
private Integer[] createVertices(int count) {
Integer[] v = new Integer[count];
for (int i = 0; i < count; i++) {
v[i] = new Integer(i);
graph.addVertex(v[i]);
}
return v;
}
/**
* create edges for this demo graph
*
* v
* an array of Vertices to connect
*/
void createEdges(Integer[] v) {
graph.addEdge(new Double(Math.random()), v[0], v[1], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[0], v[3], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[0], v[4], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[4], v[5], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[3], v[5], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[1], v[2], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[1], v[4], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[8], v[2], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[3], v[8], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[6], v[7], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[7], v[5], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[0], v[9], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[9], v[8], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[7], v[6], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[6], v[5], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[4], v[2], EdgeType.DIRECTED);
graph.addEdge(new Double(Math.random()), v[5], v[4], EdgeType.DIRECTED);
}
public static void main(String[] args) {
new Graphe();
}
}