Fecha y hora actual: Viernes 20 Sep 2019 21:04
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Obtener datos de un JTable especifico

Responder al Tema

Índice del Foro > Java > Obtener datos de un JTable especifico

Autor Mensaje
ShamanHero



Registrado: 27 Ene 2016
Mensajes: 4

Mensaje Publicado: Miércoles 27 Ene 2016 20:01

Título del mensaje: Obtener datos de un JTable especifico

Responder citando

Hola a todos! Ojala me puedan ayudar con mi problema:
Tengo un bucle que me genera un numero determinado de TabbedPane y dentro de cada uno de ellos un JTable, el cual se llena automáticamente en base a información dentro de archivos de texto.
El problema esta cuando quiero obtener la información de un row. Sucede que al hacer click en cualquier row de cualquier tabla, me devuelve información correspondiente a la ultima tabla añadida en el bucle que mencione anteriormente y no los datos que realmente quiero
Dejo un extracto del codigo en donde genero los TabbedPane y las Tablas y donde luego intento acceder a los datos.

Creacion de componentes:
Código:
  1. for (int x = 0; x < ficheros.length; x++) {
  2. panel = new JPanel();
  3. tabla = new JTable();
  4. modelo = new DefaultTableModel();
  5. modelo.addColumn("NOMBRE");
  6. modelo.addColumn("PRECIO");
  7. modelo.setRowCount(0);
  8. tabla.setAutoCreateRowSorter(true);
  9. tabla.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  10. tabla.setModel(modelo);
  11. panel.add(tabla);
  12. tpanel.add(panel, ficheros[x]);
  13. }


Obtener datos:
Código:
  1. private void tablaMouseClicked(MouseEvent evt) {
  2. String[] datosTabla = new String[4];
  3. int cantidad, precio;
  4. String strCantidad;
  5.  
  6. datosTabla[0] = "ID";
  7. datosTabla[1] = (String) tabla.getValueAt(tabla.rowAtPoint(evt.getPoint()), 0);
  8. datosTabla[2] = "1";
  9. datosTabla[3] = (String) tabla.getValueAt(tabla.rowAtPoint(evt.getPoint()), 1);
  10. System.out.println(datosTabla[1]);
  11. }


Saludos y gracias a cualquiera que se tome el tiempo de intentar ayudare

PD: Ademas de este problema, no logro ponerle titulo a las columnas de las tablas

Volver arriba
Ver perfil del usuario Enviar mensaje privado
WhiteSkull
CoAdmin


Registrado: 20 Mar 2009
Mensajes: 3136
Ubicación: y*width+x

Mensaje Publicado: Jueves 28 Ene 2016 22:13

Título del mensaje: Obtener datos de un JTable especifico

Responder citando

Hi, los nombres de las columnas mételas en el constructor del JTable como segundo parámetro en un String[] .

https://docs.oracle.com/javase/tutorial/uiswing/components/table.html

Para obtener un elemento de la tabla, no tienes que pedírselo a la tabla, sino al modelo de la tabla. Luego en el modelo que obtienes por medio de getModel(), dispones de métodos o funciones que te devuelven el elemento en la fila tal de la columna cual. De esta forma :

Código:
...
elemento=tabla.getModel().getValueAt(fila,columna); // Devuelve un object, asi que recuerda "castear"
...


suerte Ok

Volver arriba
Ver perfil del usuario Enviar mensaje privado Visitar sitio web del autor
ShamanHero



Registrado: 27 Ene 2016
Mensajes: 4

Mensaje Publicado: Jueves 28 Ene 2016 23:12

Título del mensaje: Obtener datos de un JTable especifico

Responder citando

WhiteSkull escribió:
Hi, los nombres de las columnas mételas en el constructor del JTable como segundo parámetro en un String[] .



Para obtener un elemento de la tabla, no tienes que pedírselo a la tabla, sino al modelo de la tabla. Luego en el modelo que obtienes por medio de getModel(), dispones de métodos o funciones que te devuelven el elemento en la fila tal de la columna cual. De esta forma :

Código:
...
elemento=tabla.getModel().getValueAt(fila,columna); // Devuelve un object, asi que recuerda "castear"
...


suerte Ok


Hola WhiteSkull, muchisimas gracias por contestar. He leido el link que me dejaste y he probado con el ejemplo que me diste, pero aun no resulta. Sigo obteniendo los datos de la ultima tabla, ya sea que haga click en las filas de cualquier otra tabla generada.
He de mecionar que, tanto el nombre de la tabla ("tabla") y el nombre del modelo ("modelo") son los mismo para las 5 repeticiones que generan 5 pestañas de tabbedpane y las 5 JTables.

Un saludo estimado, espero se logre entender mi problema.

Volver arriba
Ver perfil del usuario Enviar mensaje privado
WhiteSkull
CoAdmin


Registrado: 20 Mar 2009
Mensajes: 3136
Ubicación: y*width+x

Mensaje Publicado: Viernes 29 Ene 2016 12:19

Título del mensaje: Obtener datos de un JTable especifico

Responder citando

Ah, pues entonces en vez de usar tabla.rowAtPoint(evt.getPoint()) usa tabla.getSelectedRow(). Posiblemente sea un problema en la obtención de la fila, no de la tabla o el contenido en si.

Prueba y me cuentas...

Volver arriba
Ver perfil del usuario Enviar mensaje privado Visitar sitio web del autor
ShamanHero



Registrado: 27 Ene 2016
Mensajes: 4

Mensaje Publicado: Viernes 29 Ene 2016 19:38

Título del mensaje: Obtener datos de un JTable especifico

Responder citando

WhiteSkull escribió:
Ah, pues entonces en vez de usar tabla.rowAtPoint(evt.getPoint()) usa tabla.getSelectedRow(). Posiblemente sea un problema en la obtención de la fila, no de la tabla o el contenido en si.

Prueba y me cuentas...


No, tabla.getSelectedRow() fue mi opción inicial, pero solo me devuelve -1 en cualquier fila de cualquier tabla, en cambio el tabla.rowAtPoint(evt.getPoint()) me devuelve el numero de la fila correctamente.
Donde creo yo que esta el problema es que la aplicación no sabe que cosa le estoy pidiendo en la obtencion de los datos de la tabla, es decir, le estoy pidiendo que me dé los datos de la JTable con nombre 'tabla' y tengo 5 de las mismas, con el mismo nombre.... de manera que solo me envía los datos de la que se genero ultimo.

La pregunta en cuestión es como identificar una tabla en especifico o como hacer que se generen N cantidad de tablas y poder tener acceso a ellas identificándolas una por una.

Saludos y gracias!

Volver arriba
Ver perfil del usuario Enviar mensaje privado
WhiteSkull
CoAdmin


Registrado: 20 Mar 2009
Mensajes: 3136
Ubicación: y*width+x

Mensaje Publicado: Viernes 29 Ene 2016 21:24

Título del mensaje: Obtener datos de un JTable especifico

Responder citando

Código:
for (int x = 0; x < ficheros.length; x++) {
                panel = new JPanel();
                tabla = new JTable();
                modelo = new DefaultTableModel();               
                modelo.addColumn("NOMBRE");
                modelo.addColumn("PRECIO");
                modelo.setRowCount(0);
                tabla.setAutoCreateRowSorter(true);
                tabla.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                tabla.setModel(modelo);               
                panel.add(tabla);
                tpanel.add(panel, ficheros[x]);
    }


Es posible, ya que instancias ficheros.lenght veces la tabla, pero solo te quedas con una. Realmente no es problema de las funciones o métodos. Si quieres 5 tablas o crear tantas tablas como quieras lo normal es que uses un contenedor para almacenarlas como una lista o usar un array, por ejemplo (orientativo):
Código:

JTable [] tablas=new JTable[ficheros.length]; // definimos 5 tablas

for (int x = 0; x < ficheros.length; x++) {
                panel[x] = new JPanel();
                tabla[x] = new JTable();
                modelo[x] = new DefaultTableModel();               
                modelo[x].addColumn("NOMBRE");
                modelo[x].addColumn("PRECIO");
                modelo[x].setRowCount(0);
                tabla[x].setAutoCreateRowSorter(true);
                tabla[x].setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                tabla[x].setModel(modelo);               
                panel[x].add(tabla);
                tpanel[x].add(panel, ficheros[x]);
}

Volver arriba
Ver perfil del usuario Enviar mensaje privado Visitar sitio web del autor
ShamanHero



Registrado: 27 Ene 2016
Mensajes: 4

Mensaje Publicado: Viernes 29 Ene 2016 23:26

Título del mensaje: Obtener datos de un JTable especifico

Responder citando

WhiteSkull escribió:
Código:
for (int x = 0; x < ficheros.length; x++) {
                panel = new JPanel();
                tabla = new JTable();
                modelo = new DefaultTableModel();               
                modelo.addColumn("NOMBRE");
                modelo.addColumn("PRECIO");
                modelo.setRowCount(0);
                tabla.setAutoCreateRowSorter(true);
                tabla.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                tabla.setModel(modelo);               
                panel.add(tabla);
                tpanel.add(panel, ficheros[x]);
    }


Es posible, ya que instancias ficheros.lenght veces la tabla, pero solo te quedas con una. Realmente no es problema de las funciones o métodos. Si quieres 5 tablas o crear tantas tablas como quieras lo normal es que uses un contenedor para almacenarlas como una lista o usar un array, por ejemplo (orientativo):
Código:

JTable [] tablas=new JTable[ficheros.length]; // definimos 5 tablas

for (int x = 0; x < ficheros.length; x++) {
                panel[x] = new JPanel();
                tabla[x] = new JTable();
                modelo[x] = new DefaultTableModel();               
                modelo[x].addColumn("NOMBRE");
                modelo[x].addColumn("PRECIO");
                modelo[x].setRowCount(0);
                tabla[x].setAutoCreateRowSorter(true);
                tabla[x].setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
                tabla[x].setModel(modelo);               
                panel[x].add(tabla);
                tpanel[x].add(panel, ficheros[x]);
}


Interesante opción, no lo había pensado aunque busque la forma de hacer algo similar, gracias por eso.
Ya lo hice de la manera en que me recomendaste y funcionó. El problema ahora es identificar a la tabla a la que le estoy haciendo click.
tablas[0].getModel().getValueAt(tablas[0].rowAtPoint(evt.getPoint()), 0); Esto funciona, pero debo reemplazar 'tablas[0]' por algo que indique a cual de todas las tablas dentro del arreglo le estoy pidiendo los datos.

Saludos y gracias!

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

Duda de optimización de datos con VBA

Maugarni Visual Basic y VBA 0 Jueves 22 Ago 2019 13:49 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Problema con mostrar datos en JTable con Iterat...

mariaelhacker Java 0 Lunes 11 Mar 2019 13:25 Ver último mensaje
El foro no contiene ningún mensaje nuevo

AYUDA CON LOGEO Y BASE DE DATOS

gonzaloramirez PHP 1 Domingo 28 Oct 2018 03:29 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Base Datos Access Problemas Conexion/Reporte

ce_1187@hotmail.com Visual Basic .NET 0 Jueves 27 Sep 2018 22:31 Ver último mensaje
El foro no contiene ningún mensaje nuevo

¿como puedo obtener un dato de un radiobutton

jose mansilla Programación para dispositivos móviles 0 Jueves 27 Sep 2018 16:08 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,