Foros del Web » Programación para mayores de 30 ;) » Java »

me falla rellenar jTable de una manera, y de otra funciona...

Estas en el tema de me falla rellenar jTable de una manera, y de otra funciona... en el foro de Java en Foros del Web. SOLUCIONADO- VER ÚLTIMOS MENSAJES Hola de nuevo. Tengo un pequeño problema que espero me sepan resolver. Mi intencion es: Al darle al boton ACEPTAR de ...
  #1 (permalink)  
Antiguo 05/07/2010, 03:37
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 13 años, 11 meses
Puntos: 1
me falla rellenar jTable de una manera, y de otra funciona...

SOLUCIONADO- VER ÚLTIMOS MENSAJES

Hola de nuevo. Tengo un pequeño problema que espero me sepan resolver.
Mi intencion es:
Al darle al boton ACEPTAR de una ventana hija, esta se cierra, y en la ventana padre se rellena una tabla con una seria de datos.
Pues bien. Tal y como lo hago, no me funciona, en cambio, si pongo un boton en la ventana padre, que al hacer click llame a una funcion de la ventan hija...si que me funciona. Bueno, me dejo de rollo, y pongo el codigo por partes.

Cita:
public class BuscarPais extends javax.swing.JDialog {

InscribirParticipante ins = new InscribirParticipante(null, rootPaneCheckingEnabled);
public BuscarPais(java.awt.Frame parent, boolean modal){ //CONSTRUCTOR
.....
}

CON EL SIGUIENTE METODO, LO QUE HACE ES, QUE AL DARLE A ACEPTAR, SE VA AL METODO RECIBE_JUDOKAS_PAIS() DE LA OTRA CLASE QUE ABAJO TENEIS, Y EN DICHO METODO LO UNICO QUE QUIERO HACER ES, LLAMAR AL METODO DE ESTA CLASE DEVUELVEJUDOKASPAIS Y QUE LE DEVUELVA LA CONSULTA EN UN ARRAYLIS.
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
ins.recibe_judokas_pais();
dispose();
}

//ESTE METODO SOLO HACE LA CONSULTA, Y LO GUARDA EN UN ARRAYLIST PARA LUEGO DEVOLVER AL METODO QUE LO INVOCA.
public ArrayList<Judokas> devuelveJudokasPais(){
Connection conexion = null;
ArrayList<Judokas> listajudokaspais=new ArrayList<Judokas>();
try{
Class.forName("com.mysql.jdbc.Driver");
conexion = DriverManager.getConnection("jdbc:mysql://localhost/gestion_campeonatos", "root", "contraseña");
PreparedStatement consulta1 = conexion.prepareStatement("select * from judokas where pais = 'España'");
ResultSet result = consulta1.executeQuery();

while(result.next()){

int id = result.getInt(1);
String nombre = result.getString(2);
String ape1 = result.getString(3);
String ape2 = result.getString(4);
int fecha = result.getInt(5);
String sexo = result.getString(6);
String pais = result.getString(7);
String comunidad = result.getString(8);
String club= result.getString(9);
String dni= result.getString(10);

Judokas ju = new Judokas(id, nombre, ape1, ape2, fecha, sexo, pais, comunidad, club, dni);
listajudokaspais.add(ju);

}


return listajudokaspais;
}catch(Exception e){
System.out.println("Ocurrio la siguiente excepcion : " + e.toString());
System.out.close();
return null;
}finally{
try{
if (null != conexion)
conexion.close();
}catch(Exception e){
System.out.println("Ocurrio la siguiente excepcion : " + e.toString());
}
}
}
Y AQUÍ LA CLASE DE LA VENTANA PADRE, QUE ES DONDE ESTA EL JTABLE Y QUIERO QUE SE RELLENE AL DARLE AL BOTON ACEPTAR DE LA VENTANA HIJA.

Cita:
public class InscribirParticipante extends javax.swing.JDialog {

private DefaultTableModel modelo;
public InscribirParticipante(java.awt.Frame parent, boolean modal) {//CONSTRUCTOR
....
}
public ArrayList<Judokas> recibe_judokas_pais(){ //metodo que recibe los judokas de un pais y los pone en la tabla

ArrayList<Judokas> lista3=new ArrayList<Judokas>();
BuscarPais judokaspais = new BuscarPais(null, false); // ME CREO EL OBJETO DE LA CLASE BUSCARPAIS AQUI, PORQUE SI ME LO CREO FUERA DEL METODO, EN LA CLASE, ME DA ERROR.
lista3 = judokaspais.devuelveJudokasPais(); //ME LO DEVUELVE BIEN PORQUE HAGO LA EL DEBUG Y ME MUESTRA EL TAMAÑO DE LISTA3 QUE ES 6, Y ES CORRECTO.
Judokas judo[] = new Judokas[lista3.size()];
judo = lista3.toArray(judo);

for(int i=0;i<judo.length;i++){
Object[] fila = new Object[10];
fila[0]=judo[i].getId();
fila[1]=judo[i].getNombre();
fila[2]=judo[i].getApellido1();
fila[3]=judo[i].getApellido2();
fila[4]=judo[i].getFecha();
fila[5]=judo[i].getSexo();
fila[6]=judo[i].getPais();
fila[7]=judo[i].getComunidad();
fila[8]=judo[i].getClub();
fila[9]=judo[i].getDNI();


modelo.addRow(fila);
}
jTable1.setModel(modelo);
return lista; // ESTE RETURN TIENE LA EXPLICACION LUEGO

}
Pues bien, no me da error de ningun tipo, y el programa "funciona" bien. Pero no me rellena en la tabla nada.

EN CAMBIO, si pongo un boton en esta ultima clase, para que al hacer click llame a recibe_judokas_pais(), si que funciona(POR ESO HE PUESTO EL RETURN, PORQUE HE HECHO LA PRUEBA DE LLAMAR A ESE METODO DESDE UN BOTON DE LA MISMA CLASE).

DE ESTA MANERA FUNCIONA PERFECTAMENTE. LLAMA AL METODO recibe_judokas_pais(), Y ESTE LLAMA A devuelveJudokasPais() de la otra clase y recibe bien la consulta....POR ESO, NO SE QUE ME FALLA DE LA OTRA FORMA, PORQUE NO ME MUESTRA LA TABLA....
Cita:
private void jButton10ActionPerformed(java.awt.event.ActionEven t evt) {

ArrayList<Judokas> lista2=new ArrayList<Judokas>();
lista2 = recibe_judokas_pais(); // AQUI LLAMO AL METODO DE ARRIBA
Judokas judo[] = new Judokas[lista2.size()];

judo = lista2.toArray(judo);

for(int i=0;i<judo.length;i++){//bucle para cada judoka
Object[] fila = new Object[10]; //una fila para cada judoka
fila[0]=judo[i].getId(); //rellenar sus columnas
fila[1]=judo[i].getNombre();
fila[2]=judo[i].getApellido1();
fila[3]=judo[i].getApellido2();
fila[4]=judo[i].getFecha();
fila[5]=judo[i].getSexo();
fila[6]=judo[i].getPais();
fila[7]=judo[i].getComunidad();
fila[8]=judo[i].getClub();
fila[9]=judo[i].getDNI();
modelo.addRow(fila);
}
jTable1.setModel(modelo);
}

Gracias y disculpar las mayusculas, pero lo hago para que os sea mas claro distinguir codigo de mi comentarios y sepais que es lo importante.
Y perdonar por tener tantas dudas, pero estoy con varios proyectos a la vez y es un caos....

Última edición por peter_21; 15/07/2010 a las 02:35
  #2 (permalink)  
Antiguo 08/07/2010, 02:07
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 13 años, 11 meses
Puntos: 1
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Se que es largo el mensaje, pero he querido poner todo el codigo para facilitaros el que lo entendais.

Alguien sabría decirme que hago mal para que no me funcione de la manera que me falla?

Gracias
  #3 (permalink)  
Antiguo 09/07/2010, 19:01
Avatar de pablor21  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo - Uruguay
Mensajes: 197
Antigüedad: 15 años, 5 meses
Puntos: 13
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Hola!
Lo que está pasando es que en la ventana hija creas otra instancia de InscribirParticipante que la llamas ins, debes pasarle desde la ventana padre la instancia con this... de lo contrario no te va a funcionar...
asì deberías hacer en la ventana padre
BuscarPais judokaspais = new BuscarPais(this, false);

y luego en la ventana hija deberías manejarte con parent casteando a la clase de la ventana padre...

Avisa si no entendés
__________________
Desarrolloador Freelance - http://www.mvdit.com.uy
  #4 (permalink)  
Antiguo 11/07/2010, 08:52
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 13 años, 11 meses
Puntos: 1
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Cita:
Iniciado por pablor21 Ver Mensaje
Hola!
Lo que está pasando es que en la ventana hija creas otra instancia de InscribirParticipante que la llamas ins, debes pasarle desde la ventana padre la instancia con this... de lo contrario no te va a funcionar...
asì deberías hacer en la ventana padre
BuscarPais judokaspais = new BuscarPais(this, false);

y luego en la ventana hija deberías manejarte con parent casteando a la clase de la ventana padre...

Avisa si no entendés
Muchas gracias por ayuda pablor. Pero no me funciona. Creo que mas o menos entiendo a lo que te refieres. Pero no se como manejar el parent casteando.

Si pongo directamente
BuscarPais judokaspais = new BuscarPais(this, false);

me da error en "this" y me dice:
Cita:
cannot find symbol
symbol: constructor BuscarPais(gestion_campeonatos.InscribirParticipan te, boolean)
location: class gestion_campeonatos.BuscarPais
Y claro...es que el constructor de BuscarPais es:
Cita:
public BuscarPais(java.awt.Frame parent, boolean modal){
super(parent, modal);
initComponents();
this.getContentPane().setBackground(new Color(91,151,242));
this.setResizable(false);
}
Y ahi supongo que es donde entra en juego lo de parent que me decias..pero no tengo ni idea.

  #5 (permalink)  
Antiguo 11/07/2010, 16:34
Avatar de pablor21  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo - Uruguay
Mensajes: 197
Antigüedad: 15 años, 5 meses
Puntos: 13
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Hola de nuevo, lo que me parece que te está pasando es que estás mezclando forms en swing y awt... Deberías trabajar con un JFrame y no con un Frame de awt...
Prueba cambiar tu Frame BuscarPaís por un JFrame, ahí si te va a funcionar...
debarías leer sobre casting ya que es un concepto muy importante de la orientación a objetos...
__________________
Desarrolloador Freelance - http://www.mvdit.com.uy
  #6 (permalink)  
Antiguo 12/07/2010, 02:04
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 13 años, 11 meses
Puntos: 1
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Cita:
Iniciado por pablor21 Ver Mensaje
Hola de nuevo, lo que me parece que te está pasando es que estás mezclando forms en swing y awt... Deberías trabajar con un JFrame y no con un Frame de awt...
Prueba cambiar tu Frame BuscarPaís por un JFrame, ahí si te va a funcionar...
debarías leer sobre casting ya que es un concepto muy importante de la orientación a objetos...

Pues no me habia dado cuento. En verdad lo que estoy creando son JDialog...esta mal? Es decir..mi ventana principal de mi aplicacion es un JFrame...y cada vez que le doy un click a cualquier boton...a partir de ahi son JDialog. Y claro, he visto que los constructores de un JDialog son todos asi.... AWT. Pero no lo sabia. Yo solo le daba al boton derecho del raton en mi proyecto, le daba a NUEVO y elegia JDialog...y ya en en los JFrame ponia el codigo para que al darle a ese boton se habra el JDialog...

Que tengo que poner todo JFrames??? Pensaba que JFrame solo tenia que ser la ventana principal...
Cita:
public NewJDialog1(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
}
EDITO:
No entiendo porque en el constructor aparece java.awt.Frame parent...si le doy a la clase BuscarPais y voy al inspector del Netbeans, donde me sale los componentes...si le doy con e boton derecho sobre el JDialog y voy a propiedades, me pone: Clase Bean: class javax.swing.JDialog

Asique no se porque en el constructor pone awt....la clase padre de BuscarPais es InscribirParticipante y tambien es un JDialog y la clase padre de esta es ya la ventan principal....y...me parece que aqui esta el problema.
La ventana principal de mi aplicacion yo no la cree porque ya me la creo netbeans por defecto. Al darle proyecto nuevo, aplicacion de escritorio...me genera una ventana y esta segun el inspector de netbeans no es JFrame sino FrameWiew... te pongo 2 capturas del inspector para que veas por si no me explico.

[URL="http://www.subirimagenes.com/--4788770.html"]http://www.subirimagenes.com/--4788770.html[/URL]
[URL="http://www.subirimagenes.com/otros-2-4788776.html"]http://www.subirimagenes.com/otros-2-4788776.html[/URL]

Última edición por peter_21; 12/07/2010 a las 02:45
  #7 (permalink)  
Antiguo 12/07/2010, 07:21
Avatar de pablor21  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo - Uruguay
Mensajes: 197
Antigüedad: 15 años, 5 meses
Puntos: 13
Sonrisa Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Hola, personalmente prefiero no crear proyectos de escritorio con el netbeans, si no una aplicaciòn java nada más... pero es cuestion de gustos...

En cuanto a tu aplicación con JDialog está bien, me enredé yo solo al escribir, pero es básicamente lo que quise decir...

Lo de los JForms con awt está bien (personalmento no uso el editor de netbeans y no me había dado cuenta que así era que lo ponía), pero si le pasas un JFrame como parámetro está bien y te lo toma igual, de todos modos esto no va a funcionar ya que tu tienes un frameview (un invento de netbeans, que francamente lo veo innecesario... pero bueno...). volviendo a tu problema, deberías agregar un al constructor de los JDialogs un nuevo parámetro que sea de tipo FrameView y ahí sí te va a funcionar, luego si quieres propagas la referencia entre las ventanas hijas... dentro del JDialog utilizas esta referencia para hacer lo que quieres...
__________________
Desarrolloador Freelance - http://www.mvdit.com.uy
  #8 (permalink)  
Antiguo 12/07/2010, 07:50
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 13 años, 11 meses
Puntos: 1
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Cita:
Iniciado por pablor21 Ver Mensaje
Hola, personalmente prefiero no crear proyectos de escritorio con el netbeans, si no una aplicaciòn java nada más... pero es cuestion de gustos...

En cuanto a tu aplicación con JDialog está bien, me enredé yo solo al escribir, pero es básicamente lo que quise decir...

Lo de los JForms con awt está bien (personalmento no uso el editor de netbeans y no me había dado cuenta que así era que lo ponía), pero si le pasas un JFrame como parámetro está bien y te lo toma igual, de todos modos esto no va a funcionar ya que tu tienes un frameview (un invento de netbeans, que francamente lo veo innecesario... pero bueno...). volviendo a tu problema, deberías agregar un al constructor de los JDialogs un nuevo parámetro que sea de tipo FrameView y ahí sí te va a funcionar, luego si quieres propagas la referencia entre las ventanas hijas... dentro del JDialog utilizas esta referencia para hacer lo que quieres...
Voy a probar a añadirle el parametro que dices, y sino pues intentare crearla desde 0.
Muchas gracias y ya te comento como voy ok? Haber si mañana consigo hacerlo y lo pongo aqui
  #9 (permalink)  
Antiguo 13/07/2010, 02:31
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 13 años, 11 meses
Puntos: 1
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Hola de nuevo.

Pablor, te comento o a ver si hay alguien sabe la solucion. Que me estoy volviendo majara por segundos...

Es que no lo entiendo. He hecho la simple prueba haciendo otra aplicacion, pero esta vez no una aplicacion de escritorio, sino una simple aplicacion java.
Tengo mi clase Main.java que simplemente llama a un JFrame que sera la ventana principal. Esta ventana tiene un boton, pulso, y me lleva a una segunda ventana.

Aqui empieza lo importante. En esta segunda ventana JDialog es donde tengo el JTable que quiero rellenar(desde otra ventana). Tambien hay un boton, que lo pulso y me lleva a otro ventana(la tercera y ultima). Y lo que quiero es que desde esta tercera ventana al escribir algo, al darle a aceptar me haga la consulta y me rellene el JTable de la ventana de antes....

Me hace bien la consulta, incluso me pasa los datos bien a la clase donde tengo el jTable pero a la hora de rellenar el JTable no lo hace! ni siquiera me da error!!!

Esta es la clase donde esta el JTable y quiero rellenarlo desde la clase hija:

Cita:
public class previoABuscarPais extends javax.swing.JDialog {

private DefaultTableModel modelo;

public previoABuscarPais(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
modelo = (DefaultTableModel)jTable1.getModel();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
buscapais a = new buscapais(null, true);
a.setVisible(true);
}

public ArrayList<Judokas> recibe_judokas_pais(){ //metodo que recibe los judokas de un pais y los pone en la tabla

ArrayList<Judokas> lista3=new ArrayList<Judokas>();
buscapais judokaspais = new buscapais(null, true);
lista3 = judokaspais.devuelveJudokasPais(); //devuelve el listajudokapais de buscarpais, es un ArrayList
Judokas judo[] = new Judokas[lista3.size()];
judo = lista3.toArray(judo);

System.out.println(judo.length); AQUI ME MUESTRA QUE EL LENGTH ES 2, PORLOQUE LA LLAMADA A LA CLASE DEVUELVEJUDOKASPAIS FUNCIONA Y LO RETORNA BIEN!! PERO AHORA JUSTO NO ME RELLENA EL JTABLE

for(int i=0;i<judo.length;i++){
System.out.println("--------------");
Object[] fila = new Object[12];
fila[0]=judo[i].getId();
fila[1]=judo[i].getNombre();
fila[2]=judo[i].getApellido1();
fila[3]=judo[i].getApellido2();
fila[4]=judo[i].getFecha();
fila[5]=judo[i].getSexo();
fila[6]=judo[i].getPais();
fila[7]=judo[i].getComunidad();
fila[8]=judo[i].getClub();
fila[9]=judo[i].getDNI();
fila[10]=judo[i].getEdad();
fila[11]=judo[i].getPeso();


modelo.addRow(fila);
}
jTable1.setModel(modelo);


return lista3;

}
Clase buscarPais que solamente hace la consulta:

Cita:
public class buscapais extends javax.swing.JDialog {

/** Creates new form buscapais */
previoABuscarPais vamos = new previoABuscarPais(null, true);
public buscapais(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
vamos.recibe_judokas_pais();
dispose();
}
public ArrayList<Judokas> devuelveJudokasPais(){
//HACE CONSULTA Y RETORNA ARRAYLIST
}


Se que me dijiste que el error estaba en el null de buscapais judokaspais = new buscapais(null, true); pero es que no me deja poner THIS, me da error! y ademas....es que si que funciona en el sentido de que retorna bien todo! si pongo println de los arrays veo que me los muestra bien, pero en cambio, no me rellena el jTable cuando si lo hago desde la misma clase si que funciona....

Si no pongo null que pongo??
  #10 (permalink)  
Antiguo 14/07/2010, 01:47
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 13 años, 11 meses
Puntos: 1
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

No entiendo como algo que parece tan simple, a priori, me puede estar retrasando tanto el proyecto

Agradeceria mucho si alguien supiera la solucion. Si necesita alguien que le pase mas codigo por privado que me lo diga.

gracias
  #11 (permalink)  
Antiguo 14/07/2010, 04:57
 
Fecha de Ingreso: julio-2010
Mensajes: 104
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Buenos días,

Yo he hecho algo muy parecido pero la ventana padre era un FrameView y la hija un JDialog, en el cual lo unico que hacía era actualizar un dato de la BBDD, que cambiaba la información presentada en una de la columnas de la tabla de mi FrameView.

¿Has borrado los datos del modelo anterior a la llamada a la ventana 3?

Código:
while (modelo.getRowCount() > 0) {
            modelo.removeRow(0);
        }
¿No podrías hacer en la ventana 2 lo que haces en la ventana 3?

Un saludo y buen día.
  #12 (permalink)  
Antiguo 14/07/2010, 09:59
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 13 años, 11 meses
Puntos: 1
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Gracias ioel10...

Si que hago lo de limpiar los datos, pero lo hago asi: modelo.setRowCount(0); Pero ese no es el tema, porque aunque no lo limpiara, me deberia de aparecer debajo.

Porque lo quiero hacer desde la ventana 3? Me explico:
En la ventana 2 tengo un jtable1 donde aparecen( si le doy a un boton) un listado de personas. Y en esa misma ventana tengo la opcion de buscar por pais, por comunidad...entonces si le doy a buscar por pais, se me habre una ventana nueva donde me pida que introduzca el pais(lo mismo para comunidad). Y lo que quiero es que al introducir, por ejemplo, España, y al darle a ACEPTAR, en la jtable de la ventana padre aparezca las personas que son de España.

Es curioso, porque como ya he dicho, si pongo un BOTON en la ventana padre que llame a "recibe_judokas_pais()" (este metodo esta en la clase padre) si que me funciona.

Es decir, "recibe_judokas_pais()" es un metodo de la clase-ventana padre, que llama a otro metodo que esta en la clase hija el cual hace la consulta a la bb.dd. Si a "recibe_judokas_pais()" lo llamo desde un metodo(BOTON) de su misma ventana, funciona bien....en cambio si lo llamo desde la ventana hija, no me hace nada, pero si que recibe bien los datos, porque si hago un print si que los muestra. Lo unico que falla en ese caso es que no llena el jtable...y no tengo ni idea de porque.

Yo estoy trabajando con un JDialog como padre y un JDialog como hija...y el padre de todos estos JDialogs es un FrameView. Es decir-> FRAMEVIEW ventana principal de la aplicacion. Si les das a un boton me lleva a un JDIALOG que es donde este el jtable, y si en esta le das a otro boton, te lleva a otro JDIALOG que es la hija de la anterior...



edito: si que podria hacer todo en la ventana 2. De hecho, en la ventana 2 ya hago una busqueda por DNI y por nombre, y solo tengo que introducir el texto en el jtextfield correspondiente, darle a un boton y hace la busqueda y rellena el jtable, pero a la hora de buscar por pais y comunidad he puesto un jcombobox y dependiendo de lo elegido abre una ventana nueva. Creo que queda mas serio asi...y tiene que haber solucion...
  #13 (permalink)  
Antiguo 14/07/2010, 10:24
 
Fecha de Ingreso: julio-2010
Mensajes: 104
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Buenas tardes,

En esta última respuesta has hecho un gran resumen de tu aplicación, estaba hecho un lío con todo lo que habías escrito.

Ahora estoy liado con el curro pero te responderé cuando tenga dos minutos. Sólo una cosilla has probado con repintar los datos: doLayout, repaint, pack, ...

Un saludo y buen día.
  #14 (permalink)  
Antiguo 14/07/2010, 15:58
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 13 años, 11 meses
Puntos: 1
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Cita:
Iniciado por ioel10 Ver Mensaje
Buenas tardes,

En esta última respuesta has hecho un gran resumen de tu aplicación, estaba hecho un lío con todo lo que habías escrito.

Ahora estoy liado con el curro pero te responderé cuando tenga dos minutos. Sólo una cosilla has probado con repintar los datos: doLayout, repaint, pack, ...

Un saludo y buen día.
Tranquilo, que lo primero es el trabajo. En cuanto puedas me dices.

A lo de repintar...me temo que no, porque no se a que te refieres. El codigo de lo que tengo echo esta en el primer mensaje...asi que creo que no repinto nada :(

De nuevo gracias y un saludo.
  #15 (permalink)  
Antiguo 15/07/2010, 01:40
 
Fecha de Ingreso: julio-2010
Mensajes: 104
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Buenos días,

Repintar: panel de tu tabla.doLayout();
panel de tu tabla.repaint();
tu_JDialog.pack();

Un saludo y buen día.

Continua...
  #16 (permalink)  
Antiguo 15/07/2010, 01:48
 
Fecha de Ingreso: julio-2010
Mensajes: 104
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Me he hecho una miniAplicación parecida a la tuya:

1. FrameView: sólo tiene un boton que llama a JDialog "padre".

Cita:
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
JFrame mainFrame = DesktopApplication1.getApplication().getMainFrame( );

d1 d1 = new d1(mainFrame, true);

d1.setLocationRelativeTo(mainFrame);

DesktopApplication1.getApplication().show(d1);

}
2. JDialog padre(d1): JTable y botón que llama a JDialog hijo(d2):

Cita:
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {

modelo = (DefaultTableModel) jTable1.getModel();

d2 d2 = new d2(this, true);

d2.setLocationRelativeTo(this);

DesktopApplication1.getApplication().show(d2);

ArrayList<Integer> listaD1 = d2.getLista();

for (int i = 0; i < listaD1.size(); i++) {

Object[] fila = new Object[1];

fila[0] = listaD1.get(i);

modelo.addRow(fila);

}
jTable1.setModel(modelo);

}
3. JDialog hijo(d2): Creo un arrayList y le inserto datos y a ese array le genero el método get que es al que llamaré desde JDialog padre(d1).

Cita:
private ArrayList<Integer> lista = new ArrayList<Integer>();

public d2(JDialog parent, boolean modal) {

super(parent, modal);

initComponents();

for (int j = 0; j < 5; j++) {
lista.add(j);
}
dispose();

}

public ArrayList<Integer> getLista() {
return lista;
}
Esto a mi me funciona y creo que es lo que haces tú pero con la diferencia de que ahorras el get. Lo de repintar ni te lo mires, yo aquí no lo hago.
  #17 (permalink)  
Antiguo 15/07/2010, 02:33
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 13 años, 11 meses
Puntos: 1
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Primero y antes que nada: UN MILLON Y MEDIO DE GRACIAS!!!! CONSEGUIDOO!!!

Tu explicacion me ha salvado la vida. Pero aun asi no lo he hecho como tu. Te explico las diferencias que tenia.

En la primera ventana de todas, en el FrameView, en el boton tu haces:
JFrame mainFrame = DesktopApplication1.getApplication().getMainFrame( );
...
...
y yo simplemente hago:
InscribirParticipante rs = new InscribirParticipante(null, true);
rs.setVisible(true);

Pensaba que eso afectaba en algo, pero ahora que he conseguido solucionarlo me funciona tanto con null como con MainFrame como el tuyo.

Luego, en el constructor de la tercera ventana, tus parametros son:

Cita:
public d2(JDialog parent, boolean modal) {}
Y ami por defecto Netbeans me lo crea asi:
Cita:
public BuscarPais(java.awt.Frame parent, boolean modal){}
Esto me impedia el que desde la ventana intermedia, al llamar a la ultima ventana, me impedia poder pasarle this y tenia que pasarle null.
Cita:
BuscarPais bp = new BuscarPais(null, true);
Tampoco se que en afecta el pasarle this o null, porque me funciona de las dos maneras....


Ahora viene lo bueno. Os preguntareis..."entonces? Si te funciona igual con esas diferencias, que has hecho para que te funcione???"

Pues el error, la cagada, la tenia en la ventana intermedia.
Porque por un lado tenia este codigo que es el que segun que elemento del combobox elegia, me creaba la ventana HIJA...
Cita:
switch(indice){
case 0:
break;
case 1:
BuscarPais bp = new BuscarPais(null,true);
bp.setVisible(true);
.....
y luego en el metodo recibe_judokas_pais(); que es el metodo que me rellenaba la tabla, en este metodo, para llamar al ArrayList de la ventana hija me volvia a crear otra "BuscarPais bp = new BuscarPais(null,true);" Y como la ventana real que se veia era la otra, pues no me pasaba nada.

Total, que lo que he hecho, a sido hacer como TU. En el mismo codigo donde tengo el boton en la ventana intermedia para llamar a la hija, he añadido el codigo necesario para recibir el arrayList y llenar la jtable. Y el metodo recibe_judokas_pais(); ha pasado a mejor vida.

En resumen, no me daba cuenta de que creaba por un lado la ventana hija...y por otro, para llamar a un metodo de esa clase me creaba otra vez lo mismo...

De nuevo MIL gracias ioel10! Si no es por tu codigo me paso años mirando mi codigo sin darme cuenta!
:apla uso:


pd: No se que diferencia hay con lo que te he dicho al principio entre tu codigo y el mio, puesto que en vez de THIS si pongo NULL en mis llamadas a las nuevas ventanas me funciona igual...incluso yo no hago el:
//JFrame mainFrame = Gestion_campeonatos.getApplication().getMainFrame( );

Pero si lo hago, luego en el constructor de la ventana JDialog tengo que cambiar esto:
Cita:
public BuscarPais(java.awt.Frame parent, boolean modal){}
Por esto:
Cita:
public BuscarPais(JDialog parent, boolean modal)
Y en consecuencia, tambien tengo que cambiar en el main el metodo run de:
Cita:
public void run() {
BuscarPais dialog = new BuscarPais(new javax.swing.JFrame(), true);
......
a:

Cita:
public void run() {
BuscarPais dialog = new BuscarPais(new javax.swing.JDialog(), true);
....
Pues eso, que sea como sea, ME FUNCIONA TODO BIEN.
  #18 (permalink)  
Antiguo 15/07/2010, 03:06
 
Fecha de Ingreso: julio-2010
Mensajes: 104
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: me falla rellenar jTable de una manera, y de otra funciona...

Buenos días,

En las llamadas a las ventanas "hijos" desde los "padres" lo que se hace es pasar información que tengas en el padre para así poder manejarla en el hijo. Puedes crear decenas de constructores depediendo de la información que desees recibir.

Lo de tener todo el código en el event del botón no es lo más eficiente, sigue con el método recibe_judokas_pais() y borrale la línea "buscapais judokaspais = new buscapais(null, true);" o inserta el texto que recibe el arrayList y llena la jtable.

Me alegra que te haya servido para solucionarlo.

Un saludo y buen día.

Etiquetas: falla, jtable, rellenar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 02:56.