Cambiar el ultimo caracter digitado

Cordial saludo a todos.
Mi problema es el siguiente:
Estoy validando el ingreso de informacion a un JTextField para que solo acepte letras y espacios, para ello hice lo siguiente:

private void txtNameUserKeyReleased(java.awt.event.KeyEvent evt) {
int k = (int) evt.getKeyChar();//k = al valor de la tecla presionada
if (!(k >= 97 && k <= 122 || k >= 65 && k <= 90 || k == 32)) {//Si el caracter ingresado es una letra
evt.setKeyChar((char) KeyEvent.VK_BACK_SPACE);
JOptionPane.showMessageDialog(null, "El caracter ingresado no es letra !!!", "Validando Datos",
JOptionPane.ERROR_MESSAGE);
}

}
Mi idea es que si el caracter ingresado no es valido lo borre o nisiquiera se pinte en la pantalla y con ese codigo no funciona ya intente reemplazar el caracter digitado por el codigo ASCII del BACK_SPACE y tampoco me funcionó.

Al guien me puede decir como lo hago ?

Mil gracias por su tiempo y conocimiento.
Gustavo

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

JTextField field =

JTextField field = (JTextField) evt.getSource();
Strign text = field.getText();
String newText = cleanUp( text );
field.setText( newText );

O... puedes usar un formmated textfield que hacen precisamente lo que necesitas. Yo no los he usado, pero aquí esta un guía: http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextf...

Estaría interesante que nos escribieras como lo resolviste.