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

[SOLUCIONADO] Problema con @override dispose

Estas en el tema de Problema con @override dispose en el foro de Java en Foros del Web. Buenas compañer@s, Me gustaría controlar antes del cierre de un formulario si hay cambios en él y preguntar mediante un JoptionPane si se esta seguro ...
  #1 (permalink)  
Antiguo 05/08/2015, 04:09
Avatar de Hatakke  
Fecha de Ingreso: octubre-2011
Mensajes: 17
Antigüedad: 12 años, 6 meses
Puntos: 1
Problema con @override dispose

Buenas compañer@s,

Me gustaría controlar antes del cierre de un formulario si hay cambios en él y preguntar mediante un JoptionPane si se esta seguro de cerrar.

En los formularios añado una barra superior de accesos rápidos para moverme entre los diferentes formularios llamada cBarra. Por ese motivo necesito sobrescribir el metodo dispose para poder controlar el evento desde otra clase mediante formulario.dispose().

El codigo que tengo en el formulario es:

Código PHP:
private boolean verificar_cerrar_formulario (){
        
        
cPersona p1 = new cPersona (); //Dades formulari
        
cControlar_format cf = new cControlar_format ();
                
        
// Obtenemos el mismo registro que tenemos en el formulario
        
p1 p1.obtenir_cPersona(p1persona.getId_persona()); 
        
// Modificamos los registros mostrados en el formulario
        
p1.setDireccio(cf.arreglar_apostrofs(txt_direccio.getText()));
        
p1.setProvincia(cbx_provincia.getSelectedItem().toString());
        
p1.setPoblacio(cbx_poblacio.getSelectedItem().toString());
        
p1.setCodi_postal(txt_codi_postal.getText());
        
p1.setTelefon1(txt_tel1.getText());
        
p1.setTelefon2(txt_tel2.getText());
        
p1.setMail(cf.arreglar_apostrofs(txt_mail.getText()));
        
        return  
p1.equals(persona);
    }

@
Override
    
public void dispose(){
        
        
boolean comp_persona;
        
        
comp_persona verificar_cerrar_formulario ();
        
        if(
comp_persona == true){ //Es igual
            
this.dispose();
        }else{ 
// Es diferent  
            
cJOptionPane op = new cJOptionPane ();
            
int confirmado JOptionPane.showConfirmDialog(this,op.getMensajeCerrarFormulario(),op.getSeleccionOpcion(), JOptionPane.OK_OPTION);
            if (
JOptionPane.OK_OPTION == confirmado){ //Lo sé y me da igual
                
this.dispose();
            }
        }
    } 

El problema lo tengo que al confirmar de cerrarlo me entra en un bucle de mostrar el mensaje puesto que invoco al mismo metodo una y otra vez.

Alguien me puede echar una mano?

Gracias
  #2 (permalink)  
Antiguo 05/08/2015, 04:47
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Problema con @override dispose

Si entra en bucle es porque o le estás dando siempre a JOptionPane.OK_OPTION == confirmado o verificar_cerrar_formulario () es siempre true.

En cualquier caso si quieres que salga sin entrar en bucle, haz que una de esas dos condiciones no se cumpla.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 05/08/2015, 05:38
Avatar de Hatakke  
Fecha de Ingreso: octubre-2011
Mensajes: 17
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Problema con @override dispose

Gracias por responder Xerelo.

No es siempre true. Si el usuario en el JoptionPane dice que no, el formulario queda abierto. Lo controlo en el if dentro del else:

Código PHP:
if (JOptionPane.OK_OPTION == confirmado){ //Lo sé y me da igual 
                
this.dispose(); 
            } 

//No pongo else porque no cierro si el usuario le da que no 
Lo que estoy intentado hacer es cerrar el formulario dentro del método dispose sobrescrito.

Saludos
  #4 (permalink)  
Antiguo 05/08/2015, 05:40
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Problema con @override dispose

Buenas,

Yo creo que te esta entrando en un bucle porque llamas a this.dispose(), por lo que haces una llamada recursiva al mismo metodo y no sale nunca.

En lugar de this.dispose haz un super.dispose.

O mejor aun, dado que sobreescribir el metodo dispose es mala practica, sobreescribe por ejemplo el evento windowClosed:
http://docs.oracle.com/javase/tutori...wlistener.html

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 06/08/2015, 03:44
Avatar de Hatakke  
Fecha de Ingreso: octubre-2011
Mensajes: 17
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Problema con @override dispose

Gracias! Mucho mejor con windowClosed

Saludos

Etiquetas: clase
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




La zona horaria es GMT -6. Ahora son las 01:08.