Problema con JTable y bd

Tengo una aplicación en java que se comunica con una base de datos, hasta ahora los datos he podido llenar la Jtable con los datos que importo de la base de datos, he intentado poder modificar estos datos en la jtable y devolverlos a la base de datos, pero tengo problemas porque a la hora de utilizar el método getValue(int row, int col) me da error porque el número de filas es cero, yo creo que este problema es porque yo uilizo new DefaultTableModel(Object [][] datos, string[] nombrecolumnas) y en ningún momento menciono las filas, esto que realizo me sirve ya que los datos los importo de la base de datos, quisiera saber que debo hacer para solucionar mi problema y si es posible.

1 respuesta

Respuesta
1
Para ti también, yo también utilizado el DefaultTableModel, lo malo de utilizar eso es que cada vez que añades una fila o quitas una fila, tienes que volverle a setear el modelo al Jtable.
El modelo funciona de la siguiente manera, la matriz de objetos contiene todos los datos de las filas y columnas, es decir, si tu matriz tiene 8 filas y 3 columnas, tu matriz dfe objetos, en este caso llamada "datos" va a contener 8 filas y 3 columnas, el vector de nombres de columnas solo es para darle los nombres a las columnas no ocupa ninguna función en los datos.
Pégame tu código donde defines el modelo de DefaultTableModel, y pégame la parte donde quieres sacar el valor y la que te da error.
Buenas noches gente del foro y Experto, en las siguientes lineas es como defino el modelo.
Object[][] dtPer;
String[] columNames = {"Dato1","Dato2","Dato3"};
DefaultTableModel datos=new DefaultTableModel(dtPer,columNames);
El método que utilizo para sacar el valor es el siguiente
public Object[][] getDatos(){
Object[][] data = new String[Registros.row][3];
for (int i = 0; i < Registros.row; i++) {
for (int j =0; j < 3; j++) {
data[j] = (String)datos.getValueAt(i, j);
System.out.println(datos.getValueAt(1,1)+"yes");
}
}
return data;
}

Debido a que me presentaba el siguiente error
Exception occurred during event dispatching:
java.lang.ArrayIndexOutOfBoundsException: 1 >= 0,
Que a mi entender es porque el arreglo no tiene la posición a la que trato de acceder,
Le adicione lo siguiente
datos.setRowCount(Registros.row);
Y ya no me presenta ese error, pero probrando el código enviando los datos a un archivo.csv lo que esta escribiendo es null en todas las posiciones. Que estoy haciendo mal, o que debo hacer. De antemano muchas gracias por tu apoyo.
Efectivamente ese error te da porque tu matriz Object[][] dtPer; esta completamente vacía, por eso que tu jtable esta sin filas, y como esta sin filas, no puede accesar a ningún elemento, tu has hecho lo correcto en adicionarle filas, pero esa fila también se encuentra vacía, por eso te da el null, debes llenar toda la primera fila con datos de prueba, luego hacer tu botón para capturar los datos e imprimirlos por consola, una vez que logres eso ya debes insertar esos datos en tu base de datos.
Si tienes una tabla llamada persona, con campos id, nombre, apellido, como son 3 datos, ¿tu jtable tiene que tener 3 columnas para insertar cada celda de esa columna dentro de la tabla me captas?
Una vez que has hecho esto datos. SetRowCount(Registros. Row); debes insertar datos ya que como es una matriz de objetos, la inicialización del objeto por default es null.
Buenas Noches, me surge una inquietud, si yo modifico un dato en la Jtable en tiempo de ejecución este cambio lo puedo guardar.
Si, solo hace falta agregar un listener al modelo, de la siguiente forma
Datos. AddTableModelListener..
Este método se activa cada vez que se cambia un dato en el jtable, como se cambia un dato, se cambia el modelo, ya no es el mismo, entonces se activa el método, y puedea sacar el dato cambiado y añadirlo a la base de datos.
Buenos días experto, he seguido su sugerencia de llenar la primera fila con datos de prueba pero no he conseguido mi objetivo, para llenar la primera fila utilice datos.addRow, si puedes me escribes un correo y te mando mi código con el fin de que me colabores con un vistazo. Mi correo es [email protected]. Gracias y disculpa tanta molestias.
Ok ya te mande el mail.
No te olvides de finalizar la pregunta :D

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas