Necesito que alguien me eche una mano. Resulta que tengo un ventana con un JTable de usuarios, al seleccionar un usuario le doy a un botón "asignar Perfil" y se me abre un frame con los Perfiles que le puede dar a ese usuario descartando los que ya tiene, el problema es que cuando selecciono un Perfil y le doy a aceptar consigo hacer la consulta a la base de datos pero no consigo que la ventana se actualice, alguien que me pueda ayudar?
Yo tuve el mismo problema y al final utilicé un truquillo sucio y rastrero... en el evento del botón asignar perfil la última línea será un dispose(); y luego al final del evento del botón de aceptar volver a cargar el JFrame que tenga la JTable.
Claro el dispose lo que hace es cerrar la ventana no? y entonces la reabro, voy a probar ahora te digo.
Exacto, esa es la idea. A mi me vale porque no necesito tener la ventana anterior abierta.
Es que entonces pierdo la información que tengo del usuario.
Aaaaaaamigo, pensaba que la 1ª pantalla era un listado de usuarios, no que había información de uno en concreto. De todas formas, puedes hacerte un constructor para el JFrame de usuario que reciba un id de usuario y así vuelves al que estabas.
O si no, prueba a declarar el JFrame en el archivo donde está el main de la aplicación como static para poder acceder a él desde cualquier punto del programa.
Ya soluciones el problema, era bastante simple si se te ocurre como solucionarlo.
Cuando llamo a la nueva ventana le paso el JTable entero, en la otra clase lo que hago es coger el modelo de este jTable y ya ingreso los datos y lo que quieras hacer, fireTableDataChanged()... y listo.
Yo estoy usando un DefaultTableModel y cada vez que lo modifico hago un jTable1.setModel(model);.
Pero hay algo que no consigo hacer. Tengo un método que de forma iterativa va insertando filas en la tabla y me gustaría que fuese mostrando una a una las filas insertadas.
Lo que hace el JTable es quedarse congelado cuando empieza el método y cuando termina muestra el resultado final.
He probado con jTable1.repaint() pero nada.
Alguna solución?
Usa un hilo en el bucle en el que vas insertando filas, y al final del bucle mete el método wait(X); donde x es tiempo en milisegundos.
Anoche mismo pensé lo mismo pero no sabia si iba a funcionar.
Lo probaré y os comento.
Funciona "bien". Se notan ciertos parpadeos, captura algunas excepciones de cola de eventos... pero por lo menos lo hace.
Gracias ;)
Me surge otro problema al que no le encuentro solución.
Desde el hilo edito el modelo y se lo asigno a la tabla y desde el mismo hilo modifico el tamaño de la columna justo después.
El problema es que entre una sentencia y otra hay refrescos del JFrame y da sensación de destellos y ves la columna moviendose.
He buscado pero no he encontrado la forma de decirle al modelo el tamaño de la columna antes de asignarselo a la tabla, para que esto no ocurra.
Alguna solución?
No sé si se podrá hacer, pero porqué no pruebas a hacer los ajustes en el tamaño etc antes de asignar el modelo a la tabla?
Lo hago como dices. Pero para hacerlo lo hago sobre el model de la tabla
jTable1.getColumnModel().getColumn(0).setMaxWidth(25);
o
jTable1.getColumnModel().getColumn(0).setPreferredWidth(25);
Entonces al setear el nuevo modelo pierdo el tamaño del modelo anterior de columna.
puedes usar una variable para guardar el último tamaño que tuvo la columna.
De todas formas, no entiendo muy bien lo que estás intentando hacer.
Da igual xD
Gracias un así, por lo menos lo del hilo me lo solucionaste
Gracias