Programación , Domótica y microcontroladores.

Hay varias personas que se les hace difícil como utilizar un Jtree en Netebans por eso se me metió en la cabeza escribir un mini tutorial de como usar un Jtree y realizar las operaciones de agregar , eliminar y modificar.

Para tener una idea de como quedara nuestro ejemplo, mostraré dos  imágenes del árbol que fue creado en Netbeans.
Arbol
Ahora expandido
Arbol
Hay que mencionar que un Jtree debe ser llenado por la clase DefaultTreeModel la cual sirve como plantilla para llenar datos en un Jtree.
Primero declaramos lo siguientes variables:

DefaultMutableTreeNode Titulo = null;

DefaultTreeModel modelo = null;

Para añadir un nodo  al árbol escribimos el siguiente código:

String cade = JOptionPane.showInputDialog(this, «Ingrese un Departamento :»);

DefaultMutableTreeNode parentNode = null;

cont++;

TreePath parentPath = Tree.getSelectionPath();

if (parentPath == null) {

} else {

parentNode = (DefaultMutableTreeNode) (parentPath.getLastPathComponent());

}

DefaultMutableTreeNode child = new DefaultMutableTreeNode(cade);

modelo.insertNodeInto(child, parentNode, parentNode.getChildCount());

El ejemplo quedaría así:
Arbol

Despues de aceptar observamos los cambios en la imagen.
Arbol

Para eliminar el nodo se escribe el siguiente código:

DefaultMutableTreeNode parentNode = null;

TreePath currentSelection = Tree.getSelectionPath();

if (currentSelection != null) {

parentNode = (DefaultMutableTreeNode) currentSelection.getLastPathComponent();

DefaultTreeModel model = ((DefaultTreeModel) Tree.getModel());

model.removeNodeFromParent(parentNode);

}

Para modificar un nodo añadimos el siguiente código:

String cade = JOptionPane.showInputDialog(this, «Ingrese el nuevo nombre»);

TreePath currentSelection = Tree.getSelectionPath();

if (currentSelection != null) {

DefaultMutableTreeNode node = (DefaultMutableTreeNode) currentSelection.getLastPathComponent();

Object nodeInfo = node.getUserObject();

clsBook book = (clsBook) nodeInfo;

node.setUserObject(new clsBook(book.getId(), cade));

DefaultTreeModel model = ((DefaultTreeModel) Tree.getModel());

model.nodeChanged(node);

}

Veamos la iamgen.
Arbol
Despues de guardar los cambios se notan los siguientes cambios.
Arbol

Se adjunta el archivo del ejemplo que se muestra en este mini tutorial.

Si tienes alguna duda házmelas saber por favor.

Link de descarga

http://www.4shared.com/file/ukMh6LGw/JtreePractica.html

Comentarios en: "I Parte: Jtree en Netbeans" (49)

  1. interesante pero no me funcionano puedes poner el proyectos para descaragarlo

    • Hola Elil,Ya subí el proyecto de ejemplo y mil disculpas por no haber contestado a tiempo.De ahora en adelante estaré mas pendiente de los comentarios.

      La manera mas fácil de agradecer es dejar un comentario.
      Si deseas o tienes ideas de hacer algo diferente con Jtree házmelo saber para darte una mano amigo.

  2. alex Sua dijo:

    Buena explicacion gracias… no se si me puedas dar una idea de como seria para al selecionar un nodo del jtree abra un formulario en otro jframe.

  3. Hola Alex , bajate el proyecto y en el evento TreeMouseClicked pega este codigo:

    private void TreeMouseClicked(java.awt.event.MouseEvent evt) {
    // TODO add your handling code here:
    DefaultMutableTreeNode parentNode = null;
    TreePath parentPath = Tree.getSelectionPath();
    parentNode = (DefaultMutableTreeNode) (parentPath.getLastPathComponent());
    if(parentNode.isLeaf() )
    {
    JOptionPane.showMessageDialog(this, parentNode);
    //aqui codigo para abrir orto formualrio
    //FrmTreedos frm=new FrmTreedos();
    //frm.show();
    }

    }

    En cada hoja del nodo te permitira mostrar el formulario que desees.
    Avisa a todo el mundo que esta página existe.
    Gracias por comentar.

  4. wenaso….Thanks!!…una pregunta… como haces para q el arbol obtenga solo el nombre del Libro y no el id!…. cuando cargas el «DefaultMutableTreeNode».. con un objeto de la clase » clsBook «

  5. Es fácil ,en la clase pones el over ride asi Luis:
    Dentro de la clase escribes un método.

    public String toString(){
    return Descripcion;
    }

    Descripcion es un attributo de la clase.Es decir cuando el Default… carga verifica que este método override este presente de lo contrario te pondra caracteres sin sentido como nombre en el árbol.Sabes que arme todo un plan de cuentas contables en estos arboles..

  6. ahhh…asuu…=0… con razon no entendia por que estaba ese metodo en la clase ……….¡¡MAESTRO!!….. bien men…Thanks!!…. me sirvio mucho tu INFO!!… :D…..sigue adelante!!

  7. bueno hasta donde pude ver todos las funciones que reciben como parametro un objeto y muestran algo en panatalla …. en la clase del objeto existir el metodo

    public String toString(){
    return » Descripcion «;
    }

    hasta un » JcombBox » … recibe como parametro un objeto..y ahora como hago para obtener los atributos que quiero mostrar ….

    por ejemplo tengo una Clase Familia que posee como atributos «id,nombre,cantidad,etc «…. entonces cargo un objeto de la clase familia al «JComboBox » .. y como la Familia posee el metodo » over ride » entonces el «JComboBox » se cargara con la «Descripcion» que retorna el metodo toString() …… como hago para que cada vez que selecciono un Familia del «JComboBox » me muestre todos los datos de dicha Familia…es decir el » id,cantidad,etc «….no c si podrias despejarme esa duda… Thanks!!.. de antemano!

  8. Luis Solier, es sencillo.Solo tienes que hacer lo siguiente en el evento click del JcomboBox o el actionPerform.
    ClsFamilia cls=(ClsFamilia)cmb_Familia.getselectedItem();
    System.out.Println(«Id: «+cls.getId()+» Cantidad: «+cls.getCantidad() );

    Lo que hace es coger el item seleccionado el cual por detras tiene un objeto y luego le aplicas casting para capturar ese objeto.

    getId son los getter de la clase.Si no los tienes tan solo puedes acceder directamente a tus atributos como esto:
    System.out.Println(«Id:» +cls.id + «Cantidad: «+cls.Cantidad);

    Pero es importante definir los getter y setter porque te da protección a los datos.Y es un estándar aplicar esto(Aunque diría es mas que un estándar es una obligación).
    Si tienes mas dudas solo pregunta.Oh si tienes alguna sugerencia de algún tema en particular que debería escribir solo dímelo.

  9. MUCHISIMAS GRACIAS WILFO…… AHORA YA LO ENTIENDO MEJOR….BUENO SE QUIERES Q TE SUGIERA ALGUN TEMA .. SERIA INTERESANTE HAGAS UNA PUBLICACION ACERCA DE LA CONEXION DE ORACLE CON NETBEANS…. 😀

  10. Que tal, estoy empezando con esto de los Jtree y quiero molestarte con lo siguiente: leeo un archivo de texto con productos y capturo la informacion, FamiliaA, FamiliaB.. etc, y cada una de estas se dividen en tipos, FamiliaA : TipoA1, TipoA2, TipoA3.. etc, y luego estos tipos tambien se dividen en otros, al momento de ingresar las familias no tengo complicacion porque solo hago:
    FamiliaProd= new DefaultMutableTreeNode(«FamiliaX»);
    modelo.insertNodeInto(FamiliaProd,raiz,0)..
    pero cuando quiero insertar un Tipo de producto en determinada familia, no se como asociar a que familia pertenece e insertarlo… aunq si se tengo la informacion de la fam a q pertenece..

    asi tengo mi clase, disculpa:
    class ArbolProductos extends JPanel{

    DefaultMutableTreeNode raiz=new DefaultMutableTreeNode(«Productos»);
    DefaultMutableTreeNode FamiliaProd;
    DefaultMutableTreeNode Tipoprod;
    DefaultMutableTreeNode Especificoproducto;

    DefaultTreeModel modelo=new DefaultTreeModel(raiz);

    JTree arbol=new JTree(modelo);
    DefaultTreeCellRenderer render= (DefaultTreeCellRenderer)arbol.getCellRenderer();

    public ArbolProy() {

    setLayout(new BorderLayout());
    //render.setIcon(myIcon);//new ImageIcon(«A.png»));
    add(arbol,BorderLayout.CENTER);
    }

    public void Agregarfam(String fam)
    {
    FamiliaProd= new DefaultMutableTreeNode(fam);
    modelo.insertNodeInto(FamiliaProd,raiz, 0);
    }//add

    //aqui tome la idea de como se agrega a una familia, pero se q no es asi
    //al igual q en los siguients metodos
    public void AgregarTipoprod(String p)
    {
    Tipoprod= new DefaultMutableTreeNode(p);
    modelo.insertNodeInto(Tipoprod,FamiliaProd, 0);
    }//add

    public void Agregarprodespecifico(String p)
    {
    Especificoproducto= new DefaultMutableTreeNode(p);
    modelo.insertNodeInto(Especificoproducto,TipoProd, 0);
    }//add

    }

  11. Hola Edgar, para realizar lo que deseas te aconsejo hacer lo siguiente:
    Crear una clase que contenga la caracteristicas de caja registro de en tu archivo de texto:
    Ejemplo:
    FamliaA FamiliaB TipoA TipoB
    MESA TABLAB ABC BDJ
    CUCHILLO DEREK GHR RTY

    tu clase deberia contener lo siguiente:
    public class miclase{

    String FamiliaA;
    String FamiliaB;
    String TipoA;
    String TipoB;

    public miclase(String FamiliaA,String FamiliaB,String TipoA,String TipoB){
    THIS.familiaA=FamiliaA;
    this.FamiliaB=FamiliaB;
    this.TipoA=TipoA;
    this.TipoB=TipoB;
    }

    //ESTO MUESTRA info especifico ejemplo familia
    //cuando tu accedes al arbol solo ves info pero si le das click por detras
    //hay codigo del padre y otros campos
    public String toString(){
    return FamiliaB;
    }

    }

    —————————————————
    ahora en tu formulario en el evento click Jtree para guardar hacemos lo sigueinte:

    miclase xclase=new miclase();
    DefaultMutableTreeNode Titulo = null;

    DefaultTreeModel modelo = null;

    Para añadir un nodo al árbol escribimos el siguiente código:

    String cade = JOptionPane.showInputDialog(this, “Ingrese un Departamento :”);

    DefaultMutableTreeNode parentNode = null;

    cont++;

    TreePath parentPath = Tree.getSelectionPath();

    if (parentPath == null) {

    } else {

    parentNode = (DefaultMutableTreeNode) (parentPath.getLastPathComponent());

    }

    DefaultMutableTreeNode child = new DefaultMutableTreeNode(xclase);

    modelo.insertNodeInto(child, parentNode, parentNode.getChildCount());

    —————————–
    Bajate el ejemplo que adjunto esta justo lo que necesitas Edgar.

  12. Justamente una clase como la «clsBook», gracias por tu pronta respuesta y me aclaro mucho tu explicacion y tus ejemplos.. hasta pronto.
    Bendiciones!

  13. hola soy estudiante de informatica y necesito ayuda con jTree, necesito que al seleccionar un nodo me muestre un Texto Diferente en un panel que esta al costado, es una especie de ayuda, al seleccionar un tema muestra la información correspindiente. Me puedes ayudar¿?.

  14. Eso es facil amigo David , si te das cuenta el ejemplo que adjunto hace eso.Crea una clase y solo muestra el texto que deseamos en el jtree y el resto no..pero podrias utsar para mostar lo que deseas..te aconsejo bajate el ejemplo y chequealo para que sepas de loq ue te hablo.

  15. Hoy te hago el ejemplo y lo adjunto en el mensaje que te escribo..deberias subscribirte aqui en el blog.Es facil dale click en follow y eso es todo.Ventajas
    Es que te aparecen en tu correo los nuevos post y mensajes a tu correo.

  16. Esta muy bueno este tutorial… ojala me puedas ayudar también =D lo que trato de hacer es almacenar la posición de los nodos al momento que hago clic en ellos, para después usando botones de anterior y siguiente, el foco se dirija al nodo correspondiente 😀 se podría hacer eso??? o tendría que hacerlo de otra forma???? gracias de todas maneras por tu atención..

    • Hola Malusita , claro que puedes realizar eso.
      En teoría, lo que se debería realizar ; es una búsqueda en la raíz hasta el ultimo nodo mediante un bucle.y en ese bucle lo que busco es el «id» del nodo..
      Ejemplo:
      inicio raíz to ultimo nodo
      aquí recibes el nodo y analizas su «id» si es o no igual al que deseas mostrar o seleccionar..o poner focos..

      fin inicio

  17. Hola necesito ayuda para agregar datos a un jtree, podrias enviarme el codigo es que no se puede descargar

  18. Hola Brenda, aquí esta el link de descarga de 4sahred.

    http://www.4shared.com/file/ukMh6LGw/JtreePractica.html

  19. Primeramente men, muchas gracias porque me salvaste la vida con esto.
    Men si no es mucha la molestia me puedes ayudar con lo siguiente(bueno si se puede).
    Tengo que crear un administrador de bases de datos y no tengo ni idea por donde empezar ya que nunca hecho algo parecido, tome tu ejemplo del arbol para el proyecto pero tengo que crear tablas con lenguaje SQL CRETE TABLE xxxx, pero me aconsejaron que la cree con un array para que e haga dinamicamente, me dicen que es solo concatenar String pero te soy sincero no se que hacer, no se por donde comenzar este proyecto.
    Te dejo mi correo por aquello y voy a seguir viendo tu blog.
    alexmataf@hotmail.com
    Muchas Gracias, bendiciones.

    • Amigo puedes resolver tu problema concatenando , en java es super fácil.En realidad , lo que debes hacer es un motor de sql.Yo de ti empiezo por hacer consultas básicas y luego averiguar como sacer todos los atributos mediante sql, y luego cargar en un árbol.

      • alexander dijo:

        Men muchas gracias por responder.
        Si no es muchas la molestia me puedes dar un ejemplo para guiarme.

        Gracias men, bendiciones !!!!!!!! = )

      • Ok , Alexander .Hoy realizo un ejemplo y mañana 21 de marzo lo subo para que veas a que me refiero.

      • Excelente men muchas gracias la verdad cuesta encontrar personas como ud que ayudan a los demas desinteresadamente.
        Nuevamente muchas gracias, bendiciones!!!!!!1

      • Alex , no te enviado por que estoy en exámenes pero hoy si te envio el ejemplo.Acabo de subir un ejemplo de Jtree , justo lo que necesitas , espero que te sirva de guía.

      • men gracias, pero si estas en examenes mejor concentrate en ellos y cuando tengas un tiempito me lo envias.
        Mas bien muchisimas gracias y perdona las molestias
        Bendiciones

  20. men otra cosa, ese que me dices que subiste, donde lo subiste??? En algun servidor de descargas???

  21. Buenas. Tengo que hacer un arbol parecido pero con checkbox, de forma que los nodos sean editables. Alguna sugerencia?

  22. que buena info…!!! te felicito.. estoy aprendiendo esto del JTree y tengo una duda .. como le puedo hacer para que enves de agregar un nodo pueda agregar una carpeta como las que tienes en el ejmplo:
    Adm. Redes
    Adm. Laboratorios
    se puede hacer con el mismo boton que usamos para agregar nodos o debo usar otro aparte…? te agradeceria bastante si me ayudaras…?

  23. javier Brenes dijo:

    amigo necesito tu ayuda urgente necesito crear un Jtree con todo lo que mi computadora tiene es decir los ficheros del equipo todo como cuando precionas windows + e en una pc con windows y aparece un arbol al lado izquierdo con todo lo que hay en la compu.. algo asi tengo que hacer ,ya que mi proyecto consiste en enviar archivos de un cliente a un servidor(sockets) pero por mas que leo y busco no encuentro nada y no se como hacerlo me serviria demaciado tu ayuda

  24. como hago para q en el jtree me aparezcan todas las carpetas k contiene mi disco c:???? :S urgente

  25. muy bueno excelente men muchisimas gracias por compartir tu conociemiento

    • muy bueno y como hago para cuando le de click a cualquier lista del arbol me salga una vantana denrtro del mismo JFrame osea darle click y al lado derecho del JTree salga la ventana o mejor dicho como JTabeePan panel
      te lo agraderia mucho .. espero q me comprenda lo inexperto

  26. Juan Ocampo dijo:

    Te quería preguntar cómo harías un jtree utilizando un treeMap??? si me respondes, te lo agradezco

  27. Hola, muchas gracias por tu ayuda, estoy tratando de mostrar mi plan de cuentas en un JTree y no encuentro la forma de mostrar los nodos anidados. Descargue tu ejemplo, lo analicé y sigo sin poder encontrar la forma de acomodar mi código.

    public static void cargarArbolPC (Connection con, String empresa, JTree arbolPC) {
    try {
    TreeSet elementos = consultarPC (con,empresa);
    DefaultMutableTreeNode raiz = new DefaultMutableTreeNode (» «);
    DefaultTreeModel modelo = new DefaultTreeModel(raiz);
    DefaultMutableTreeNode nodo1,nodo2;
    int i = 0, cant = elementos.size();
    while (i < cant) {
    Cuenta c = elementos.pollFirst(),
    p = padre(con, empresa, c.getPC_cod());
    nodo1 = new DefaultMutableTreeNode (c.toString());
    if (p == null) {
    nodo2 = raiz;
    }else {
    nodo2 = new DefaultMutableTreeNode (p.toString());
    }
    modelo.insertNodeInto(nodo1, nodo2, posicionHijo(con, empresa, c.getPC_cod()));

    i++;
    }
    arbolPC.setModel(modelo);
    } catch (SQLException ex) {
    System.out.println("Error en cargaArbol: "+e.getMessage());
    }
    }

    El problema es el insertNodeInto, solo inserta aquellos que tienen como padre nodo2 (o raiz) y no sé el por qué sucede ni como solucionarlo.

    Agradecería tu ayuda, y nuevamente gracias y felicitaciones por el trabajo!

  28. Hernàn Cardenas dijo:

    Una Pregunta: como hago para guardar un TreePath[] («variable que guarda las signaciones de los checkboxs de un CheckBoxtree») en una base de datos luego recuperarlo y asignarselo a un CheckBoxTree ?, agradecimientos de antemano !

  29. Andres Berrio dijo:

    hey men una pregunta… si yo quiero que un nodo al darle yo clic me lleve a una pagina o modulo ¿como hago?. si tienes el codigo o un tutorial, te agradeceria que me lo compartieras. Gracias.

  30. And to think I was going to talk to somnoee in person about this.

  31. que onda bro yo estoy intenda que me muestro todas las bases en un jTree podrias ayudarme en como se haria eso

Replica a Wilfo Cancelar la respuesta