elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 01:53  


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java (Moderadores: Debci, Leyer)
| | | |-+  Dibujar un árbol en Java sin usar JTree
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Dibujar un árbol en Java sin usar JTree  (Leído 9,930 veces)
Fran88

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: Dibujar un árbol en Java sin usar JTree
« Respuesta #15 en: 13 Septiembre 2009, 17:39 »

Estamos a domingo y estoy ansioso por ver tu metodo!!  ;D xD


En línea
Amerikano|Cls


Desconectado Desconectado

Mensajes: 783


[Beyond This Life]


Ver Perfil WWW
Re: Dibujar un árbol en Java sin usar JTree
« Respuesta #16 en: 14 Septiembre 2009, 20:16 »

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.

Código
public BufferedImage dibujarArbol(nodo raiz,int x,int y)
   {
       if (raiz.esHoja()) return dibujarNodo(raiz);
 
       ArrayList<BufferedImage> imagenes=new ArrayList<BufferedImage>();
       BufferedImage imagenFinal;
       int ancho=0,alto=0;
       for (Object hijo : raiz.getHijos())
       {
           nodo son=(nodo)hijo;
           BufferedImage im=dibujarArbol(son,0,0);
           imagenes.add(im);
           ancho+=im.getWidth()+GAP_X;
 
           if(im.getHeight()>alto) alto=im.getHeight();
       }
       alto+=ALTO_NODO+2*GAP_Y;
       BufferedImage imagenRaiz=dibujarNodo(raiz);
 
       if(ancho<imagenRaiz.getHeight())ancho=imagenRaiz.getHeight();
 
       imagenFinal=new BufferedImage(ancho, alto, BufferedImage.TYPE_INT_RGB);
       imagenFinal.getGraphics().setColor(Color.white);
       imagenFinal.getGraphics().fillRect(0, 0, getWidth(), getHeight());
       Graphics2D g2d=imagenFinal.createGraphics();
 
       g2d.drawImage(imagenRaiz, ancho/2-ANCHO_NODO/2, 0, null);
       int posx=GAP_X;
 
       for (BufferedImage bNodo : imagenes) {
 
           g2d.setColor(Color.RED);
           g2d.setStroke(new BasicStroke(2));
           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
    */

   private BufferedImage dibujarNodo(nodo n)
   {
       BufferedImage imagenNodo=new BufferedImage(ANCHO_NODO, ALTO_NODO, BufferedImage.TYPE_INT_RGB);
       Graphics2D g=imagenNodo.createGraphics();
 
 
       g.setColor(Color.CYAN);
       g.fillRect(0, 0, ANCHO_NODO, ALTO_NODO);
 
       BasicStroke bs=new BasicStroke(3);
       g.setStroke(bs);
       g.setColor(Color.BLACK);
       g.drawRect(0, 0, ANCHO_NODO-1, ALTO_NODO-1);
 
       g.setColor(Color.BLUE);
       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 ;)


En línea





Mi blog:
http://amerikanocls.blogspot.com
Amerikano|Cls


Desconectado Desconectado

Mensajes: 783


[Beyond This Life]


Ver Perfil WWW
Re: Dibujar un árbol en Java sin usar JTree
« Respuesta #17 en: 18 Septiembre 2009, 16:30 »

Alguien lo ha mirado o sigue en las penas???  :-\
En línea





Mi blog:
http://amerikanocls.blogspot.com
juancho77


Desconectado Desconectado

Mensajes: 455


rie con demencia


Ver Perfil
Re: Dibujar un árbol en Java sin usar JTree
« Respuesta #18 en: 18 Septiembre 2009, 22:30 »

jaja yo lo acabo de ver y me da verguenza la solución que di yo antes.
un abrazo viejo, buen código.
En línea

kuruchus

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Dibujar un árbol en Java sin usar JTree
« Respuesta #19 en: 9 Diciembre 2009, 13:46 »

Tengo yo que hacer algo parecido.

Agradezco el aporte de juancho77 (aunque el link está caído) y de AmeRiK@nO.

Fran88, ¿al final qué código utilizaste?

Gracias
En línea
efx

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Dibujar un árbol en Java sin usar JTree
« Respuesta #20 en: 11 Diciembre 2009, 23:23 »

pues yo entregue un proyecto similar...solo que lo deje a medias
por que los nodos se me enciman...pero los programo en un  Applet...
habia creado un tema para pedir ayuda de como dibujarlo pero al final encontre esta solucion... :rolleyes:

Código
/*Metodo recursivo que dibuja el arbol empezando de la raiz hasta la ultima hoja*/
public void dibujaNodo(Graphics g,int x,int y,NodoA raiz)
{
NodoA aux=raiz;
 
//si la raiz no esta vacia--tiene al menos un elemento
if(aux!=null)
{
g.setColor(new Color(255,228,196));
g.fillOval(x,y,25,25);
g.drawOval(x,y,25,25);//solo dibujamos el nodo raiz en X Y
 
g.setColor(new Color(165,42,42));
g.drawString(aux.getinfo()+"",x+9,y+16);//dibujamos la info de raiz en medio del circulo
 
/*si hay algo en la izquierda*/
if(aux.getizq()!=null)
{
//Imprimir linea de x,y a x-TAM, y+TAM
 
g.drawLine(x+5,y+22,x-35,y+50);
/*se llama el metodo pero ahora con nuevas coordenadas y otro nodo*/
dibujaNodo(g,x-50,y+50,aux.getizq());
 
}
 
/*si hay algo en la derecha*/
if(aux.getder()!=null)
{
//Imprimir linea de x,y a x+TAM, y+TAM
g.drawLine(x+20,y+22,x+55,y+50);
/*se llama el metodo pero ahora con nuevas coordenadas y otro nodo*/
dibujaNodo(g,x+50,y+50,aux.getder());
 
}
}
 
}

ya solo en el metodo paint

Código
public void paint(Graphics g) {
 
g.drawImage(titulo,120,0,242,93,this);
/*Solo acomodamos los componentes*/
txtDato.setBounds(420,30,30,20);
insertar.setBounds(440,60,60,20);
eliminar.setBounds(370,60,60,20);
 
rEn.setBounds(20,95,120,20);
rPos.setBounds(160,95,120,20);
rPre.setBounds(310,95,120,20);
 
h.setBounds(168,125,100,20);
 
dibujaNodo(g,200,150,A.getraiz());
 
 
}

bueno pues salu2 a todos  ;D
En línea
kuruchus

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Dibujar un árbol en Java sin usar JTree
« Respuesta #21 en: 6 Enero 2010, 14:32 »

Gracias por la ayuda. Terminé el proyecto y cuando se acabe el curso subiré el código aquí.
Un saludo
En línea
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda implementar arbol trie en java
Java
Cooltan 1 1,939 Último mensaje 3 Abril 2011, 05:20
por Tryptophan
Usar CSS en Java Server Faces
Java
Tlecoatl 0 1,085 Último mensaje 20 Agosto 2011, 08:03
por Tlecoatl
Duda:Arbol genealogico en java
Java
Mioshi 4 1,042 Último mensaje 30 Noviembre 2011, 20:08
por Mioshi
JTree en Java
Java
neotonygold 1 462 Último mensaje 27 Febrero 2012, 14:29
por Proteus1989
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines