Usar Graphviz desde Java
Graphviz es una herramienta que agrupa varios programas que generan distintos tipos de grafos a partir de archivos con un lenguaje definido. o tambien a travez de una api. (ejemplo de uso de graphviz desde C# para dibujar árbol binario, ejemplo de graphviz para dibujar un arbol B)
primero te descargas el paquete de graphviz y lo instalas
http://www.graphviz.org/Download_windows.php
eso crea en archivos de programa una carpeta
C:\Archivos de programa\Graphviz 2.28\bin
ahi estan los ejecutables que nos interesan, en este caso por lo que planteas vamos a usar dot.exe que es para dibujar grafos dirigidos jerarquicos.
algo mas del lenguaje dot
http://www.graphviz.org/Documentation/dotguide.pdf
un ejemplo de grafo simple
grafo1.txt
digraph G
{
node1;
node2;
node3;
node1 -> node2 [label="linea1"];
node1 -> node3 [label="linea2"];
node2 -> node3 [label="linea3"];
}
grafo2.txt
digraph G
{
main->parse->execute
main->init;
main->cleanup;
execute->make_string;
execute->printf
init->make_string;
main->printf;
execute->compare;
}
ahora para generar un jpg a partir de estos codigos, digamos que tenes dos archivos. grafo1.txt y grafo2.txt
se debe invocar en la consola el siguiente comando
...path_de_dot...\dot.exe -Tjpg archivo_de_entrada -o archivo_de_salida
a lo mas concreto para nuestros archivos de prueba
C:\Archivos de programa\Graphviz 2.28\bin\dot.exe -Tjpg grafo1.txt -o grafo1.jpg
y
C:\Archivos de programa\Graphviz 2.21\bin\dot.exe -Tjpg grafo2.txt -o grafo2.jpg
ahora para hacer esto desde java. vas a tener que generar el texto que representa el grafo para luego invocar a dot.exe desde java y que te genere el jpg y luego jalar el jpg y mostrarlo en java. (esto es solo una forma, si conseguis el api de graphviz para java, mejor pero ya es otro metodo)
lo que vas a hacer para invocar la generacion es usar Runtime.getRuntime().exec() de java para invocar a dot.exe y mandarle los parametros de tus archivos que queres pasar a jpg.
public class Main {
public static void main(String[] args) {
System.out.println("Hola Mundo");
try {
String dotPath = "c:\\Archivos de programa\\Graphviz 2.28\\bin\\dot.exe";
String fileInputPath = "c:\\grafo1.txt";
String fileOutputPath = "c:\\grafo1.jpg";
String tParam = "-Tjpg";
String tOParam = "-o";
String[] cmd = new String[5];
cmd[0] = dotPath;
cmd[1] = tParam;
cmd[2] = fileInputPath;
cmd[3] = tOParam;
cmd[4] = fileOutputPath;
Runtime rt = Runtime.getRuntime();
rt.exec( cmd );
} catch (Exception ex) {
ex.printStackTrace();
} finally {
}
}
}
Solo tenes que ver donde generas tus archivos de texto para representar los grafos, y luego invocar a dot y que te genere los jpgs. ya de ahi usas los jpgs donde sea necesario…
otros links de referencia
http://java.sun.com/developer/JDCTechTips/2003/tt0304.html
http://blog.taragana.com/index.php/archive/java-runtimeexec-guide/es/