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.
Ahora expandido
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í:
Despues de aceptar observamos los cambios en la imagen.
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.
Despues de guardar los cambios se notan los siguientes cambios.
Se adjunta el archivo del ejemplo que se muestra en este mini tutorial.
Si tienes alguna duda házmelas saber por favor.
Comentarios en: "I Parte: Jtree en Netbeans" (49)
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.
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.
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.
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 «
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..
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!!
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!
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.
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…. 😀
Bueno ,aunque no tengo Oracle me tocara bajar la version libre para probar y compartir con todos ustedes lo nuevo.
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
}
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.
Justamente una clase como la «clsBook», gracias por tu pronta respuesta y me aclaro mucho tu explicacion y tus ejemplos.. hasta pronto.
Bendiciones!
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¿?.
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.
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.
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
Hola necesito ayuda para agregar datos a un jtree, podrias enviarme el codigo es que no se puede descargar
Brenda te puedes suscribir al blog si deseas recibir constantes publicaciones.Muy pronto GIS , y muchos ejemplos más.
Great artleic, thank you again for writing.
Hola Brenda, aquí esta el link de descarga de 4sahred.
http://www.4shared.com/file/ukMh6LGw/JtreePractica.html
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.
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
men otra cosa, ese que me dices que subiste, donde lo subiste??? En algun servidor de descargas???
Allí , esta el link de descarga del ejemplo Alex.
Un plan de cuentas contables llenado directamente de la base de mysql.
Buenas. Tengo que hacer un arbol parecido pero con checkbox, de forma que los nodos sean editables. Alguna sugerencia?
En el blog esta lo que buscas.
Defaultmutable Jtree con Jcheckbox
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…?
Claro.. también tienes un ejemplo dinámico que saca datos de un gestor , en este caso mysql.
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
como hago para q en el jtree me aparezcan todas las carpetas k contiene mi disco c:???? :S urgente
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
Debes crear un internaljframe que son los que se dibujan dentro de frames.
Hay un ejemplo que tiene lo que pides ;buscalo en el blog , es un mini sistema contable que te carga un frame al darle click en un nodo del árbol.
MUCHAS GRACIAS POR RESPONDER GRACIAS..
Te quería preguntar cómo harías un jtree utilizando un treeMap??? si me respondes, te lo agradezco
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!
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 !
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.
And to think I was going to talk to somnoee in person about this.
que onda bro yo estoy intenda que me muestro todas las bases en un jTree podrias ayudarme en como se haria eso