20 abril 2005

InputVerifier de java

Estoy haciendo un editor, heredando de JFormattedTextField y basado en el patrón estrategia. Quería que mientras la entrada no fuera correcta, el editor no dejara perder el foco, que el cursor no se pudiera sacar del editor.

Investigando por la API he encontrado el tema del InputVerifier. Todos los JComponent de java colaboran entre ellos a la hora de pasarse el foco de uno a otro. Cuando el foco va a pasar del JComponent A al JComponent B, B le pregunta a A si puede perder el foco. Si A contesta que sí, el foco pasa sin problemas de A a B. Si A contesta que no, el foco se queda en A.

Cuando se le pregunta a A, internamente A le pregunta a una clase que tiene guardada dentro, (una clase hija de InputVerifier) si puede o no perder el foco, llamando al método verify() de dicha clase.

Nosotros podemos hacernos una clase hija de InputVerifier (por ejemplo, ComprobadorEntrada) de forma que en el método verify() leemos lo que ha escrito el usuario en el JTextField, vemos si es correcto y devolvemos true si es correcto o false en caso contrario.

Luego tenemos que meter nuestro ComprobadorEntrada en el JTextField, usando su método setInputVerifier(). El resultado es que si el usuario escribe algo en el JTextField e intenta sacar el foco de ahí (pulsando un botón, yendo al siguiente campo a rellenar o cualquier otra cosa), antes de que el JTextField pierda el foco, se llamará a nuestro método ComprobadorEntrada.verify(). Si devolvemos false, el foco no saldrá de nuestro JTextField.

No hay comentarios: