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:
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.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());
}
}
}
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());
}
}
}
Cita:
Pues bien, no me da error de ningun tipo, y el programa "funciona" bien. Pero no me rellena en la tabla nada. 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
}
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
}
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);
}
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....