Problema en formulario swing al manejar perdida de foco

Iniciado por alfrosende, 14 Abril 2015, 17:33 PM

0 Miembros y 1 Visitante están viendo este tema.

alfrosende

Hola a todos ... molesto nuevamente por el siguiente problema.
Tengo un JFrame con 4 textfield que representan 4 entidades (entre otros componentes). En dichas cajas de texto se ingresan las clave de cada entidad que verifican existencia contra sus respectivas tablas (no importa si es en BD o memoria o lo que sea). El tema es que en la perdida de foco de cada cajita yo hago la verificacion de existencia de lo ingresado y si no existe envio un JOptionPane avisando que el dato no existe, pero tengo dos problemas con el comportamiento de la perdida de foco que no he podido resolver:

1) Cuando cambio el foco mediante TAB y el dato no es valido, es como que antes de abrir el JOptionPane del error le da el foco al siguiente textfield entonces al querer mostrar el mensaje primero ejecuta el focus lost del que gano el foco (que como esta en blando tambien envia mensaje de error), al cerrar este mensaje ahi nuevamente me muestra otro mensaje de error ahora si con el que efectivamente perdio el foco en primera instancia.

2) Lo otro es al cerrar el formulario ... me pasa lo mismo, se ejecuta la perdida de foco del textfield donde esta el cursor entonces antes de cerrar el formulario me muestra el mensaje de error si no tiene un dato valido.

Espero no haber sido demasiado entreverado en la descripción del problema, desde ya muchas gracias al que pueda ayudarme a evitar esto que me pasa.

P.D.: Quise probar con un imput verifaier, pero chequea cada entrada desde e teclado por lo que no me deja escirbir nada

alfrosende

Sobre el problema 2 encontre la forma ... en el lost focus ejecuto el codigo solo si el oposite component es distinto de null ... sigo sin poder resolver lo primero!!!!

Usuario Invitado

Si pones código quizás haya más posibilidad de que te puedan ayudar.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

alfrosende

El codigo de dos de las cajas de texto es este:

private void txtDivisionIdFocusLost(java.awt.event.FocusEvent evt) {                                       
        if (evt.getOppositeComponent() != null) {
            String dsc = regarch("DEP", txtDivisionId.getText(), "DEP", "0001");
            if (dsc != null) {
                txtDivisionDsc.setText(dsc);
            } else {
                JOptionPane.showMessageDialog(null, "División inexistente", "Error", JOptionPane.ERROR_MESSAGE);
                txtDivisionId.setText("");
                txtDivisionDsc.setText("");
            }
        }
    }         
private void txtCecIdFocusLost(java.awt.event.FocusEvent evt) {                                   
        if (evt.getOppositeComponent() != null) {
            String dsc = regarch("CEC", txtCecId.getText(), "CEC", "0001");
            if (dsc != null) {
                txtCecDsc.setText(dsc);
            } else {
                JOptionPane.showMessageDialog(null, "Centro de costos inexistente", "Error", JOptionPane.ERROR_MESSAGE);
                txtCecId.setText("");
                txtCecDsc.setText("");
            }
        }
    }                     


Cuando pierde el foco la caja de texto de id de division y se para en la de id de cec, se ejecuta primero el mensaje de centro de costos inexistente, y al aceptar se ejecuta inmediatamente el de división inexistente.

Gracias

Usuario Invitado

Me parece curioso que se ejecute un evento focusLost cuando un TextField gana el foco (focusGained). ¿Estás seguro que txtFocusLost se está llamando dentro de focusLost?
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein