Bueno lamento la demora pues como todavia ando un poco acosado de tareas solo subire el el src para que lo vean porque no me queda tiempo de explicarlo detelladamente, pero basicamente los dos metodos mas importantes se encuentran en el paquete
JTGraph de la misma clase
JTGraph.java dibujarArbol() y
dibujarNodo().
El primero recibe la raiz del arbol n-ario y va creando
BufferedImages como sea necesario segun los hijos que tenga dicho nodo, los cuales son creados en el metodo
dibujarNodo, y finalmente estos
BufferedImages son unidos en un
BufferedImage final que sera el que se pegara en el panel.
{
if (raiz.esHoja()) return dibujarNodo(raiz);
ArrayList<BufferedImage> imagenes=new ArrayList<BufferedImage>();
int ancho=0,alto=0;
for (Object hijo
: raiz.
getHijos()) {
nodo son=(nodo)hijo;
imagenes.add(im);
ancho+=im.getWidth()+GAP_X;
if(im.getHeight()>alto) alto=im.getHeight();
}
alto+=ALTO_NODO+2*GAP_Y;
if(ancho<imagenRaiz.getHeight())ancho=imagenRaiz.getHeight();
imagenFinal.
getGraphics().
setColor(Color.
white); imagenFinal.getGraphics().fillRect(0, 0, getWidth(), getHeight());
g2d.drawImage(imagenRaiz, ancho/2-ANCHO_NODO/2, 0, null);
int posx=GAP_X;
g2d.drawLine(ancho/2, ALTO_NODO+0, posx+bNodo.getWidth()/2, ALTO_NODO+GAP_Y*2);
g2d.drawImage(bNodo, posx, ALTO_NODO+2*GAP_Y, this);
posx+=bNodo.getWidth()+GAP_X;
}
imagenFinal.
getGraphics().
setColor(Color.
black); imagenFinal.getGraphics().drawRect(0, 0, getWidth(), getHeight());
return imagenFinal;
}
/**
* netodo para dibujar un solo nodo
* @param n el nodo a dibujar
* @return una imagen con le nodo dibujado
*/
{
g.fillRect(0, 0, ANCHO_NODO, ALTO_NODO);
g.setStroke(bs);
g.drawRect(0, 0, ANCHO_NODO-1, ALTO_NODO-1);
g.
setFont(new Font("Arial",
Font.
BOLD,
20)); g.drawString(n.toString(), 10, ALTO_NODO/2);
return imagenNodo;
}
Link: http://www.zshare.net/download/65561955ef26ba1f/Salu2 y espero les sirva de algo