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

Código:

digraph G
{
    node1;
    node2;
    node3;

    node1 -> node2 [label="linea1"];
    node1 -> node3 [label="linea2"];
    node2 -> node3 [label="linea3"];
}






otro mas

grafo2.txt

Código: 

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

Código: 

...path_de_dot...\dot.exe -Tjpg archivo_de_entrada -o archivo_de_salida
a lo mas concreto para nuestros archivos de prueba

Código:

C:\Archivos de programa\Graphviz 2.28\bin\dot.exe -Tjpg grafo1.txt -o grafo1.jpg

y

Código: 

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.

Código: 






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/

http://www.ibm.com/developerworks/library/l-graphvis/

Esta aplicación demuestra como intercambiar el JPanel activo en un JFrame para crear el efecto de pestaña.

no es raro encontrarnos con la necesidad de modificar de forma dinámica el layout en un JFrame, y muchas veces nuestros componentes no responden como esperamos, en este ejemplo se muestran de forma simple los pequeños detalles que hacen la diferencia.

Este ejemplo demuestra como usar un JTabbedPane de forma basica, esto permite crear aplicaciones con pestañas en java utilizando swing

Codigo


import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;

public class Main extends JFrame {
    public Main() {
        try {
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void jbInit() throws Exception {
      
        this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        this.getContentPane().setLayout( new BorderLayout() );
        this.setSize( new Dimension(400, 300) );
        this.setTitle( "Test" );
      
        /* crear y agregar al formulario 
            aqui vamos a crear el JTabbedPane y tres JPanel que
            usaremos como pestañas */
      
        JTabbedPane tabPanel = new JTabbedPane();
      
        /* creamos un panel para cada pestaña */
      
        JPanel tabA = new JPanel();
        tabA.setPreferredSize( new Dimension(100,100) );
        tabA.setLayout( new BorderLayout() );
      
        JPanel tabB = new JPanel();
        tabB.setPreferredSize( new Dimension(100,100) );
        tabB.setLayout( new BorderLayout() );
      
        JPanel tabC = new JPanel();
        tabC.setPreferredSize( new Dimension(100,100) );
        tabC.setLayout( new BorderLayout() );
      
        /* ahora crear un boton, para la pestaña A */
        JButton botonTabA = new JButton("Boton");        
        tabA.add( botonTabA , BorderLayout.CENTER );
      
        /* un label para la pestaña B */
        JLabel labelTabB = new JLabel();
        labelTabB.setText("Label");
        tabB.add( labelTabB , BorderLayout.CENTER );
      
        /* un textarea para la pestaña C */
        JTextArea textTabC = new JTextArea();
        textTabC.setText("texto");
        tabC.add( textTabC , BorderLayout.CENTER );
      
        /* aqui se crean las pestañas a partir de los panels */
        tabPanel.addTab( "Tab A" , tabA );
        tabPanel.addTab( "Tab B" , tabB );
        tabPanel.addTab( "Tab C" , tabC );
      
        /* agregar al formulario el componente JTabbedPane */
      
        this.getContentPane().add( tabPanel , BorderLayout.CENTER );
      
    }
  
    public static void main(String[] args) {
        Main m = new Main();
        m.setVisible(true);
    }

}

Descargar Proyecto en JDeveloper 11g


ademas las pestañas pueden habilitarse/deshabilitarse con el método 
setEnabledAt de la clase jTabbedPane


http://download.oracle.com/javase/6/docs/api/javax/swing/JTabbedPane.html#setEnabledAt(int, boolean)

en este video se muestra como configurar JDeveloper para que pueda lanzar código que depende de librerías que a su vez tienen dependencias nativas como es el caso de LWJGL, JOGL, JOCL y muchas otras, básicamente el truco consiste en definir un parámetro extra en las opciones de lanzamiento de «java.exe» para que incluyan una configuración personalizada de la propiedad «java.library.path» para que esta apunte a la carpeta correcta, donde se incluyen las dependencias nativas de nuestras librerías.