Después del break anterior sobre Eclipse y Netbeans, continuamos con la secuencia de entradas sobre Java Swing, esta vez es el turno de los componentes complejos, sin embargo cambiaré la metodología de las entradas anteriores pues el tema lo amerita....
Se creará una entrada por cada componente complejo, con el fin de exponer rapidamente y mediante ejemplos su funcionamiento.....iniciamos con JTable....
Que es?
Un Jtable representa una tabla de datos con sus respectivas Filas y Columnas, la información que se muestra en ella puede ser ingresada tanto por nosotros como obtenida de una base de datos...
El Ejemplo.
Para el ejemplo presentaremos una ventana de registro de usuarios donde a medida que se diligencia el formulario, se almacenan los datos en la BD, desde allí se obtendrá la información y se mostrarán los datos en 2 JTable.........
los JTable son aparentemente iguales, sin embargo la diferencia esta en la forma como los llenamos...........el primero lo llenaremos usando lógica de programación, el segundo lo llenaremos con un componente DefaultTableModel.........
Este ejemplo es basado en la aplicación realizada sobre el Patrón Modelo Vista Controlador (El Script de la BD lo encuentran en esa entrada), por lo tanto usaremos parte de la lógica desarrollada.......para esta solo dejaremos la vista de registro, agregandole los JTable con las que vamos a trabajar....
La Aplicación.
Como se mencionó el ejemplo es simple, tenemos una sección de registro y una sección donde mostramos los JTable.
Por cuestiones de simplicidad no aplicaremos el MVC de lleno, sin embargo seguimos usando los patrones DAO y VO para el manejo de la información, el primero para comunicarnos con la BD y el segundo para transportar nuestros datos.
En la clase Conexion tenemos los parámetros requeridos para conectarnos a nuestra BD MySql, por ultimo usamos la clase Principal para llamar a la VentanaRegistro donde presentamos la GUI y llenamos las tablas que muestran la información.
Tabla Usuario Matriz de Datos.
Este JTable lo llenamos aplicando un poquito de lógica de programación, uno de los constructores de la clase JTable recibe 2 argumentos, el primero es la matriz con los datos a mostrar, el segundo es un arreglo con los nombres de las columnas, por esa razón lo que hacemos es obtener los datos de la BD, almacenarlos en una lista y posteriormente pasarlos a la matriz, así como inicializar un arreglo con los encabezados para finalmente mandárselos al contructor.....
public void mostrarDatosUsandoLogica() { String titulos[] = { "Codigo", "Nombre", "Edad", "Profesión","Telefono" }; String información[][] = obtieneMariz();// obtenemos la informacion de la BD mitabla1 = new JTable(información, titulos); mitabla1.setEnabled(false); mitabla1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); mibarra1.setViewportView(mitabla1); } private String[][] obtieneMariz() { PersonaDao miPersonaDao = new PersonaDao(); /** * llamamos al metodo que retorna la info de la BD y la almacena en la * lista */ ArrayList< PersonaVo > miLista = miPersonaDao.buscarUsuariosConMatriz(); /** * como sabemos que son 5 campos, definimos ese valor por defecto para * las columnas las filas dependen de los registros retornados */ String informacion[][] = new String[miLista.size()][5]; for (int x = 0; x < informacion.length; x++) { informacion[x][0] = miLista.get(x).getIdPersona() + ""; informacion[x][1] = miLista.get(x).getNombrePersona() + ""; informacion[x][2] = miLista.get(x).getProfesionPersona() + ""; informacion[x][3] = miLista.get(x).getEdadPersona() + ""; informacion[x][4] = miLista.get(x).getTelefonoPersona() + ""; } return informacion; }
Tabla Usando Table Model
Este JTable a nivel visual es igual que el anterior, sin embargo la diferencia radica en la forma de obtener los datos, aqui usamos un constructor sin argumentos y un objeto de tipo DefaultTableModel el cual nos permite definir la forma como llenamos la tabla, tanto en el caso de los encabezados como en la información....... de esta manera el llenado de los datos se realiza directamente por medio del objeto model que se envia como parametro al metodo que consulta la BD....
Con esta tabla vemos que podemos utilizar otros elementos compatibles con el componente JTable que nos pueden ahorrar muchas lineas de código, en este caso comparandolo con el anterior nos ahorra un método con un proceso de mas para obtener el mismo resultado.....
Adicional a esta guia les comparto un video donde explico el proceso trabajando con Mysql
Y Listo!!!! Con eso terminamos el ejemplo, los invito a descargarlo y validar su funcionamiento...........espero que les pueda servir!!!!
Descarga!!!Este JTable a nivel visual es igual que el anterior, sin embargo la diferencia radica en la forma de obtener los datos, aqui usamos un constructor sin argumentos y un objeto de tipo DefaultTableModel el cual nos permite definir la forma como llenamos la tabla, tanto en el caso de los encabezados como en la información....... de esta manera el llenado de los datos se realiza directamente por medio del objeto model que se envia como parametro al metodo que consulta la BD....
private void mostrarDatosConTableModel() { DefaultTableModel model; model = new DefaultTableModel();// definimos el objeto tableModel miTabla2 = new JTable();// creamos la instancia de la tabla miTabla2.setModel(model); model.addColumn("Nº Documento"); model.addColumn("Nombre"); model.addColumn("Edad"); model.addColumn("Profesión"); model.addColumn("Telefono"); miTabla2.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); miTabla2.getTableHeader().setReorderingAllowed(false); PersonaDao miPersonaDao2 = new PersonaDao(); /** * enviamos el objeto TableModel, como mandamos el objeto podemos * manipularlo desde el metodo */ miPersonaDao2.buscarUsuariosConTableModel(model); miBarra2.setViewportView(miTabla2); }
Con esta tabla vemos que podemos utilizar otros elementos compatibles con el componente JTable que nos pueden ahorrar muchas lineas de código, en este caso comparandolo con el anterior nos ahorra un método con un proceso de mas para obtener el mismo resultado.....
Adicional a esta guia les comparto un video donde explico el proceso trabajando con Mysql
Y Listo!!!! Con eso terminamos el ejemplo, los invito a descargarlo y validar su funcionamiento...........espero que les pueda servir!!!!
El ejemplo es muy simple, sin mayores complicaciones, aquí dejo el enlace de descarga por si lo quieren revisar ;).......está en Eclipse pero si usas NetBeans te interesará esta entrada con un vídeo paso a paso de como abrirlo en el... recuerden que es gratis, y nada cuesta opinar, compartir o agradecer :)
También te podría Interesar.
- ¿Eclipse Vs Netbeans?
- Trabajando con SVN desde Eclipse ...... Algunos Conceptos
- Configuración Ambiente de Desarrollo... Descarga de Eclipse
- Instalando el Plugin JBoss Tools En Eclipse
- Menús Con Java Swing.
- Clases en Java
- Clases Abstractas
¿Hay algo que quieras anexar o comentar sobre esta entrada? no dudes en hacerlo.....y si te gustó...... te invito a compartir y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)
Entendi bien, pero bueno lo que necesito saber es como hacer mostrar en el Jtable un arraylist, usando el DefaultTableModel. Si me pudieses ayudar, te lo agradecería mucho :)
ResponderEliminarHola, Gracias por comentar, te cuento que el metodo addRow() solo acepta arreglos o vectores, no permite arrayList, lo que puedes hacer es obtener los datos en un arrayList y luego pasarlos a un arreglo para que se muestre en la tabla... verifica lo siguiente:
Eliminaren el metodo de buscar usuarios con table model
Creas el ArrayList: ArrayList< Object > obj= new ArrayList< Object >();
En el for : obj.add(rs.getObject(i + 1));
y luego transformas haciendo un cast y lo envias
Object [ ] arreglo = (Object [ ] ) obj.toArray();
model.addRow(arreglo);
Espero que te sirva ;)
GRaciassss
Eliminarel link de descarga???? My name Wilder
EliminarHola, con gusto, y Wilder, el enlace está ahí al final de la entrada, cualquier cosa me cuentas ;)
EliminarGracias Muchas gracias lo encontre... :D
EliminarHola, esta genial ese ejemplo, no quiero pasar por ignorante, pero no hallo el link de descarga, lo busco y no lo encuentro, por favor, ayúdame con eso, sigue así, buen blog, regaré el link a mis compañeros de ingeniería de sistemas, saludos
EliminarHola Hector, gracias por comentar y si lo compartes seria de gran ayuda para que pueda ser fácilmente encontrado, el enlace esta en la parte que dice "aquí dejo el enlace de descarga" pasa el mouse por encima y te debería activar el link, debería verse como en texto gris (Así lo veo yo) voy a cambiar entonces el color para que sea mas fácil de encontrar ;) un saludo y te invito a suscribirte en el botón de la derecha "Participa en el Sitio" ;)
Eliminarlisto viejo, muchas gracias, ha sido un gran aporte por lo visto, creo que tengo material que puede servir para compartir, no sé si quiera, gracias :)
EliminarHola Hector, muchas gracias y claro, seria bueno conocer el material, escribeme, en "Acerca De" encuentras mi correo ;) un Saludo
Eliminarpara los q tienen netbeans y ya declararon una tabl y no saben modificarla este es el codigo a aplicar en e evento
Eliminar//siendo rowData = Object rowData[][] = { { "Row1-Column1", "Row1-Column2", "Row1-Column3","prueba"},
// { "Row2-Column1", "Row2-Column2", "Row2-Column3","prueba"},
// { "Row3-Column1", "Row3-Column2", "Row3-Column3","prueba"}};
Tabla.setModel(new javax.swing.table.DefaultTableModel(
rowData /*[][] {
{null, null, null, null},
{null, "hola", null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
}*/,
new String [] {
"nombre", "CI/RIF", "Usuario", "Estatus"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
}); este codigo debe ejecutarse con cuando se presiona un boton o iniciando alli le inclui una variable Object solo para que vean su editacion una vez conocido este codigo se me hizo muy facil editar la tabla =P, espero les ayude
Muchas gracias amigo..muy claro para empezar a entenderlo... :)
ResponderEliminarCon Gusto, me alegra que te sirviera ;)
EliminarGracias por este archivo muy bueno :)
ResponderEliminarCon Gusto Brian, espero que te sirva ;)
EliminarHola amigo una pregunta, teniendo las tablas hay forma de que haga un reporte y lo guarde en excel, te agradecería si me ayudas con eso !!
ResponderEliminarSaludos
Hola Cesar, si señor, todo depende de la logica que le metas, por ejemplo puedes usar la libreria apache POI y usar los mismos datos para generar un reporte, o tambien puedes usar iReport y la misma consulta para generar el reporte, luego lo vinculas a java........................mas adelante publicaré ejemplos de los 2 temas, te invito a unirte al sitio para estar pendiente, un saludo
EliminarMuchas gracias, muy útil para los que estamos empezando.
ResponderEliminarUn saludo
Con Mucho Gusto ;)
EliminarMuchas Gracias, me ha ayudado mucho.
ResponderEliminarUn Gusto, me alegra que te sirviera ;)
EliminarHola Cristian;
ResponderEliminarAntes que todo quiero agradecerte por este blog, me ha servido de mucho. Tengo una inquietud y es que deseo implementar un Jtable pero en java server face, no se si este objeto si sea compatible con esta tecnología o hay otra forma de hacerlo. Gracias.
Hola, la verdad nunca lo he intentado por ahí ya que el JTable es enfocado a JSE (Java Standard Edition), con JSF ya hablamos de JEE (Java Enterprise Edition), ahi ya tendrias que trabajar con tablas tipo html o si trabajar con librerias como richFaces puedes usar el componente DataTable, te dejo el enlace a un demo de richFaces para que lo veas, y te dejo un videoTutorial que hice sobre un proyecto web con richFaces, tengo algunos videos que te pueden servir, mas adelante espero subir mas...
EliminardemoRich: http://livedemo.exadel.com/richfaces-demo/richfaces/dataTable.jsf
Video : http://www.youtube.com/watch?v=SAfGl7XbFNI
Buenas amigo este archivo del proyecto es para eclipse o para netbeans aclarame porfavor porque yo programo en netbeans y lo descargue y pense que descargo malo pero entonces calmame la dudita porfavor gracias
ResponderEliminarHola Santiago, el proyecto está en Eclipse, lo que puedes hacer es crear un proyecto en netbeans y ahí copiar las clases de mi proyecto y listo, el debe tomartelas.....fijate en los paquetes porq tambien tendrias que crear la misma estructura.... un saludo
Eliminaro te iba a decir si depronto no me podrias colaborar a hacerlo en netbeans que la verdad necesito hacer eso para una empresa y pues si me pudieras colaborar seria de mucha ayuda!
ResponderEliminarHola Santiago, que pena no había visto este comentario, y ps en netbeans no hay problema, como te dije en el otro comentario puedes trabajarlo desde ahí..... búscate en mi blog, también tengo una entrada mostrando como importar el código al IDE netbeans fácilmente, es un vídeo tutorial, espero que te sirva ;)
EliminarHola, importarlo en NetBeans es muy fácil, sigue el video tutorial de Cristian. Gracias, una consulta Cristian, podrías facilitarnos el Script de la base de datos si no es mucha molestia. Saludos desde El Salvador.
ResponderEliminarHola Edgard, te cuento que el Script lo encuentras en la entrada sobre el MVC, te dejo el enlace y gracias por comentar ;) (Pregunta... el enlace está al iniciar esta entrada, el link no se diferencia? me gustaria que me comentaras para entonces cambiar el color.. un saludo)
Eliminarhttp://codejavu.blogspot.com/2013/06/ejemplo-modelo-vista-controlador.html
Cristian, pon el enlace en azul para diferenciarlo.
ResponderEliminarGracias por compartir tus conocimientos ;) éxitos!!!
ResponderEliminarChristian, tendrías el mismo ejemplo de acceso de datos a MySql con ADO en vez de DAO ?
ResponderEliminarMuchas Gracias. El mejor blog que he visto hasta ahora.....
gracias
ResponderEliminarMuchas gracias por el ejemplo, sobre todo por poner las dos opciones de llenado, con arreglos y con JTableModel
ResponderEliminarQuisiera saber como obtener los datos que están almacenados de mi tabla a las cajas de texto con eventos del mouse y keylistener
ResponderEliminarhola necesito un favor para una tarea y no lo encuentro por ningún lado necesito que en un jtxtfield me muestre el resultado de una suma de una columna de un jtable en el modelo mvc en java netbeans porfavor si me pudieras ayudar
ResponderEliminarTramboliko el repanchinganteblog pinchegUeys increible
ResponderEliminarhola necesito q cuando quiera buas informacion en una jtablet utilizando un combobox como podria hacerlo
ResponderEliminarestimado baje el codigo que esta en esta pagina y aguegue lo siguiente en VentanaRegistro
EliminarString op[]={"Seleccione","Acepta", "Rechaza"};
JComboBox comboz=new JComboBox(op);
miPersonaDao2.buscarUsuariosConTableModel(model);
if (miTabla2.getColumnModel().getColumnCount() > 0) {
miTabla2.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(comboz));
}
Hola, Excelente trabajo. Muchas Gracias por tu tiempo.
ResponderEliminarJorge
Excelente muchisimas gracias es lo que andaba buscando hace a;os te pasaste gracias me haz salvado el trabajo
ResponderEliminarDisculpa en mi caso es hacer que en la misma tabla le de yo agregar y se quede guardado, no se como hacerlo, me podrías ayudar por favor ^^
ResponderEliminarpor ejemplo son 4 filas; actividad, fecha, hora, lugar
Hola, descargué el proyecto y me da error
ResponderEliminaren package dao;
en package principal;
en import ventanas.VentanaRegistro;
y en import dao.PersonaDao;
import vo.PersonaVo;
me pueden explicar por qué, gracias
hola como puedo mostrar un jtable que es muy grande ya que tiene unos 20 campos que mostrar por cada registro , me podrias ayudar , gracias
ResponderEliminarhola amigos, soy nuevo en java y tengo una duda muy grande alguien sabe como llevar un arreglo hecho en java hacia ireports y escribirlo en una tabla de ireports???
ResponderEliminarMe fue útil. gracias.
ResponderEliminarGracias por el aporte...de mucha ayuda :)
ResponderEliminarcomo puedo obtener los datos que tengo guardados en una matriz de 5x5 en una jtable en java netbeans????
ResponderEliminarComo hago para eliminar
ResponderEliminarcomo llenar el jtable desde un formulario si esta en otra ventana?
ResponderEliminarSiempre aprendiendo mucho. Mil gracias!!!!
ResponderEliminarHola, de antemano quiero agradecer por la información en tu blog, solo una duda, como se podría llenar el JTable mediante un archivo Json, espero y me puedas ayudar brindandome algunos tips, gracias y que estes de lo mejor...Saludos
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminaresta parte del codigo no la entiendo, es decir se debe crear una clase PersonaDao con un metodo buscarUsuariosConTableModel?
ResponderEliminarPersonaDao miPersonaDao2 = new PersonaDao();
/**
* enviamos el objeto TableModel, como mandamos el objeto podemos
* manipularlo desde el metodo
*/
miPersonaDao2.buscarUsuariosConTableModel(model);
miBarra2.setViewportView(miTabla2);
}