Estou desenvolvendo um pequeno aplicativo onde tenho que “não deixar” o usuário digitar acentos, pontos ou qualquer caractere diferente de letras ou numeros (´~^´.,) etc…
Existe alguma forma de se fazer isso no momento da digitação e não uma validação depois de sair do foco do campo texto?
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
public class ControlarEntradaTexto extends PlainDocument
{
@Override
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException
{
if(/*aqui voce faz a verificacao se 'str' tem acento ou nao*/)
super.insertString(offs, str, a);
}
}
A ideia de criar o PlainDocument parece ser a mais eficaz… na hora de sobrescrever o metodo insertString voce seta quais caracteres voce quer deixar no campo. Tipo assim olha… para aceitar apenas numeros eu faço assim:
Coloque esse trecho no Evento KeyTyped do InputTextField
int k=evt.getKeyChar();
if((k>47 && k<58)){
}
else{
evt.setKeyChar((char)KeyEvent.VK_CLEAR);
}
o intervalo de maior que 47 e menor que 58 deixa digitar apenas numeros, e não letras
agora para o seu caso olhe na tabela ascii e use mais algumas condições para deixar do jeito que vc quer
MaskFormatter Mask = new MaskFormatter("U");
Mask.setInvalidCharacters("Todos os caracteres que deseja bloquear");
JFormattedTextField textfield = new JFormattedTextField(Mask);