Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Maestro/detalle entre jtree y jtable con resultset

Buenos días,

Tengo una duda, que no se muy bien como podría resolverla "eficiente".

Tengo varias tablas relacionadas entre si, por ejemplo:

* Paises
* Ciudades

Mi objetivo es mostrar en un jtree los diferentes paises y dentro de cada pais su ciudad, ejemplo:

- España
|- Madrid
|- Toledo
|- Etc...

Vale, hasta ahí lo tengo resuelto correctamente.

Mi problema está en que en un jTable quiero mostrar los demás datos de la tabla de ciudades en función a la ciudad especifica que tenga seleccionada en el jtree (vamos.. un maestro/detalle), ejemplo:

Si me situo con el ratón sobre la ciudad Madrid me gustaría que en el jTable me cargue los datos de este registro solamente.

El problema que veo es que las tablas de paises y ciudades la clave primaria son códigos ya que España, Madrid etc.. son descripciones. Al no pintar estos códigos, cuando me situo en cada nodo o item del jtree no se que código tiene detrás esa descripción, por tanto no puedo filtrar la select que me muestra los registros en el jtable para ese registro en concreto (hombre... podría filtrar por la descripción pero entiendo que lo correcto es filtrar por las claves primarias)

¿Como podría resolver esto para saber las claves de cada registro que tengo en el jtree?

He pensado en hacer un objeto que me guarde todos estos valores cuando voy montando el DefaultMutableTreeNode y que también guarde la posición del registro en el jtree... pero no se si sería así lo mejor.. o habría otras formas.

Muchas gracias,

Saludos.

septiembre 26, 2013 | Unregistered CommenterFDB

Guenas.

Aunque la vista JTree no muestre los códigos y solo muestre las descripciones, en el modelo puedes añadir los códigos que necesitas. Cuando en la vista se seleccione una determinada fila no tienes mas que pedirle al modelo que te devuelva el valor código correspondiente a esa fila para mostrarla en la JTable.

Un saludo
Paposo

septiembre 26, 2013 | Unregistered CommenterPaposo

Hola de nuevo,

Con eso sería perfecto.

Pero, ¿Como hago eso?.

Yo tendría algo así:

DefaultMutableTreeNode pais;
DefaultMutableTreeNode ciudad;
pais = new DefaultMutableTreeNode(valorPais);
ciudad = new DefaultMutableTreeNode(valorCiudad);
pais.add(ciudad);
DefaultTreeModel modelofinal = new DefaultTreeModel(pais);
this.jTree1.setModel(modelofinal);

¿Con el add lo añado al modelo, pero como lo añadiría de forma "oculta"?

Gracias,

septiembre 26, 2013 | Unregistered CommenterFDB

Puedes crear los nodos del JTree con cualquier objeto que necesites, incluso con instancias de clases tan complejas como quieras.

Lo que necesitas es crear un renderer a medida, por ejemplo:

class CiudadesCellRenderer implements TreeCellRenderer

donde vas a seleccionar lo que quieres que muestre el JTree en cada nodo.

Cuando seleccionas un nodo del JTree, te devolverá el objeto completo, del que puedes escoger los datos que quieras, para lo que necesites.

septiembre 26, 2013 | Registered Commenterchoces