JTextField apenas Letras

14 respostas
T

Boa Tarde

Tenho um probleminha que eu sei que é simples para vcs…

eu gostaria de saber se tem algum metodo, mascara para digitar apenas letras maiusculas bloqueando a entrada de outros caracteres no JTextField…como *&%$#…
eu consegui aqui bloquear apenas numeros, e ja fiz muitas comparações inadequadas…

obrigado

14 Respostas

C

Dá uma olhada na classe JFormattedTextField

Abraço!

A

Você pode usar algo do tipo

formatonome = new MaskFormatter("*****************************************************");
formatonome.setValidCharacters(" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
A

Não sei se apareceu na 1ª msg

textoNome = new JFormattedTextField();

formatonome = new MaskFormatter("**************************");

formatonome.setValidCharacters("ABCDEFGHIJKLMNOPQRSTUVWXYZ");

formatonome.install(textoNome);
T

Obrigado Cassio e aangreen
era isso mesmo que eu precisava.
abraços

T

amigo eu analisei o codigo e pensei que ia compilar.
quando apliquei no projeto não rolou acho que eu esqueci de alguma coisa ai , alguem pode me ajudar

tfNome=new JFormattedTextField();	

try{		

MaskFormatter formatNome = new MaskFormatter("**************************");	

tfNome.setValidCharacters(ABCDEFGHIJKLMNOPQRSTUVWXYZ);

formatNome.install(tfNome);

}catch (Exception efn){}
erro:--------------------Configuration: --------------------

C:\Documents and Settings\Thiago Passos\Desktop\Projeto ubs jd iva\cadastroPaciente.java:44: cannot find symbol

symbol  : method setValidCharacters(java.lang.String)

location: class javax.swing.JFormattedTextField

tfNome.setValidCharacters(ABCDEFGHIJKLMNOPQRSTUVWXYZ);

^

Note: C:\Documents and Settings\Thiago Passos\Desktop\Projeto ubs jd iva\cadastroPaciente.java uses or overrides a deprecated API.

Note: Recompile with -Xlint:deprecation for details.

1 error

Process completed.

T

algume me ajuda ai por favor

S

[/quote]Amigo,

Uma dica …

Insira esse médodo em sua aplicação

private MaskFormatter setMascara(String mascara) {
		MaskFormatter mask = null;
		try {
			mask = new MaskFormatter(mascara);
		} catch (ParseException e) {

			e.printStackTrace();
		}
		return mask;
	}

Em seu JFormattedTextField … vc faça assim …

Espero ter ajudado  :D :D

Falowww
tfNome=new JFormattedTextField(setMascara("UUUUUUUUUU");

[quote]
Dicas:
# => Usa número válido, usa Character.isDigit
=> Caractere de escape, usado para escape de qualquer caractere de formato especial
U =>Qualquer caractere(Character.isLetter). Todas as letras minúsculas são transformadas em maiúsculas.
L => Qualquer caractere(Character.isLetter). Todas as letras maiúsculas são transformadas em minúsculas.
A => Qualquer caractere ou digito (Character.isLetter ou Character.isDigit)
? => Qualquer caractere
* => Qualquer coisa
H => Qualquer caractere hexadecima(0-9, a-f ou A-F)

_

Isso limita a quantidade de caracteres, não?

Um outro jeito:

JTextField field = new JTextField();
field.setDocument( new PlainDocument()
{
	@Override
	public void insertString( int offs, String str, AttributeSet a )
			throws BadLocationException
	{
		//normalmente apenas uma letra é inserida por vez,
		//mas fazendo assim também previne caaso o usuário
		//cole algum texto
		for( int i = 0; i < str.length(); i++ )
			if( Character.isLetter( str.charAt( i ) ) == false )
				return;

		super.insertString( offs, str, a );
	}
} );
S

Aquele método que passei, também limita a quantidade de caractere no JFormatterTextField.

Caro você queira somente uma 5 letras e a primeira vc queira que em maiusculo.

É só fazer assim…

tfNome=new JFormattedTextField(setMascara("ULLLL");

Pronto … ele ficou condicionado a receber apenas 5 caracteres e com a primeira em maiuscula.

Certo !!!

T

valew pela ajuda ai…
mas agora tem o seguinte problema como que eu faço para dar espaço ao digitar um nome por exemplo (" Thiago Passos")
só fica assim ThiagoPassos, alguem pode me ajudar aiii??
segue o meu codigo.

if(e.getSource()==tfNome)

{

for(int i=0;i<str.length();i++)

{

if(str.charAt(i)==’.’)

b++;

}

if(b>2)

{

e.setKeyChar( ');

}//não faz nada
if(e.getKeyChar()>='a' && e.getKeyChar()<='z' || e.getKeyChar()=='.')
		{
		}
		else
		{
		
			if(str==null)
				aux.setText(" ");
			else
			{
				int q=str.length();
				for(int i=0;i<q-1;i++)
				{
					if(str.charAt(i)>='a' && str.charAt(i)<='z' || str.charAt(i)=='.')
					
						str2+=str.charAt(i);
				}
				aux.setText(str2);
			}
			
		}
}
T

Bem para escrever espaços é so habilitar o espaço como caracter que também possa ser escrito!

Eu tenho outro problema, formatei uma JFormattedTextField para receber apenas 9 digitos, com o seguinte codigo:

text = new JFormattedTextField();  
			text.setBounds(new Rectangle(21, 60, 182, 21));
			  
			MaskFormatter formatonome;
			try {
				
				formatonome = new MaskFormatter("#########");
				formatonome.setValidCharacters("[telefone removido]");   
				formatonome.install(text);
			
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

Mas quando vou escrever na na caixinha está cheia de espaços. não há forma te tirar todos esses espaços?
Já tentei o text.setValue(""), mas depois perde toda a configuração de feita pelo MASKFORMATTER. :?
Têm alguma sugestão de como resolver este problema?

R

o que seria essa formato nome ?

T

A variavél formatonome é uma variavél do tipo MaskFormatter, que esta declarada no inicio da class!

A

Abra um tópico e refaça sua pergunta.

[]'s

Criado 17 de outubro de 2006
Ultima resposta 9 de out. de 2011
Respostas 14
Participantes 8