Inserir apenas Letras em um JTextField

Bom dia Galera, estou precisando de uma força.

Gostaria que meu JTextField aceitasse apenas letras (não numeros).

Eu possuo uma classe que herda Plain Document para definir o tamanho maximo do textfield.

Sera que alquem consegue me ajudar a implementar um metodo nessa classe que aceite somente letra.

Grato pela atenção.

Dentro do seu PlainDocument, você poderia verificar se o caracter digitado é uma letra.

Character.isLetter( seuChar )

Acredito que desta forma você consiga digitar somente letras. Se não estou enganado, ele deve filtrar os caracteres especiais( ! @ # $ % & * ) coisas do tipo.

Até mais

Desculpe, sou bem iniciante. Onde devo utilizar e como chamar?

import javax.swing.text.*;

public class FixedLengthDocument extends PlainDocument
{
    private int iMaxLength;

    public FixedLengthDocument(int maxlen) {
        super();
        iMaxLength = maxlen;
    }

    @Override
    public void insertString(int offset, String str, AttributeSet attr)
                    throws BadLocationException {
        if (this == null) return;

        if (iMaxLength <= 0)        // aceitara qualquer no. de caracteres
        {
            super.insertString(offset, str, attr);
            return;
        }

        int ilen = (getLength() + str.length());
        if (ilen <= iMaxLength)    // se o comprimento final for menor...
             super.insertString(offset, str, attr);   // ...aceita str
             //super.insertString(0,"00", attr);

        }
 
}

Vlw pela atenção.

Utilize um JFormattedTextField!

Sim, como eu disse, ja consigo utilizar a classe acima para determinar o tamanho maximo do meu TextField…

Eu preciso de um parecido para que ele aceite apenas letras, e não numero e caracteres;…

[code] if (ilen <= iMaxLength) // se o comprimento final for menor…
boolean tudoLetra=true;
for(int i=0;i<str.lenght;i++){
if(!Character.isLetter(str[i])){
tudoLetra=false;
}
}
if(tudoLetra){
super.insertString(offset, str, attr); // …aceita str
//super.insertString(0,“00”, attr);
}

} [/code]

testa aí
fiz rapidão aqui
nao sei se funciona… nao conheço esse PlainDocument aí
mas já dá pra vc ter uma ideia

No seu código vc tem que inserir duas condições, mas a condição é a mesma em ambos os casos. Marquei as condições com um comentário a frente.

Veja abaixo


if (iMaxLength <= 0)        // aceitara qualquer no. de caracteres   
{   
   if ( !Character.isLetter( str.charAt( 0 ) ) ) { // Condição 1
      return;
   }

    super.insertString(offset, str, attr);   
    return;   
}   

int ilen = (getLength() + str.length());   
if (ilen <= iMaxLength) { // se o comprimento final for menor...   
   if ( !Character.isLetter( str.charAt( 0 ) ) ) { // Condição 2
       return;
   }

    super.insertString(offset, str, attr);   // ...aceita str   
    //super.insertString(0,"00", attr);   
}

Acho que isso deve resolver =)

Até mais

Deu alguns erros que consegui resolver, porem esta dando esse erro anexo:


noobei,

Troca str[i] por str.getCharAt(i)

:slight_smile:

Troca o str[i] por str.charAt( i )

Edit: julianofischer não tinha visto seu post

[quote=julianofischer][code] if (ilen <= iMaxLength) // se o comprimento final for menor…
boolean tudoLetra=true;
for(int i=0;i<str.lenght;i++){
if(!Character.isLetter(str[i])){
tudoLetra=false;
}
}
if(tudoLetra){
super.insertString(offset, str, attr); // …aceita str
//super.insertString(0,“00”, attr);
}

} [/code]

testa aí
fiz rapidão aqui
nao sei se funciona… nao conheço esse PlainDocument aí
mas já dá pra vc ter uma ideia
[/quote]

A cada caracter digitado no JTextField é executado o método insertString(…)
A variável str é somente o caracter digitado, ou seja, acho que não tem necessidade de fazer um laço nessa variável, sabendo que ela vem somente o caracter digitado.

Acredito que basta fazer testar as condições.

Vlw galera pela força mesmo.

Deu certo LedRenan. Batata, isso mesmo… funfou que é uma blz…

Desculpem minha ignorancia… mais tow caminhando, rsss, e ainda chego la…

Vlw julianofischer pela força tambem…

Agora só mais uma duvida,

Caso eu precise validar um outro jTextFiel somente aceitando numero.

Como devo proceder??? Pois já estou utilizando o metodo para validar somente letras…

Vlw galera…

O ideal (acredito eu) é vc ter um PlainDocument para cada tipo…um para letra e outro para números

Neste caso vc faz a verificação de digito…
Para letras faziamos…

if ( !Character.isLetter( seuChar ) ) {
         return;
}

Para números faz a seguinte condição

if ( !Character.isDigit( seuChar ) ) {
         return;
}

Até mais…

1 curtida

Galera, mais um probleminha.

Como faço para aceitar espaço???

Ele esta aceitando apenas letras, não esta aceitando espaço.

Vlw…

rcoimbra,
O código abaixo verifica se o caracter digitado é um espaço em branco.

Character.isWhitespace( steste.charAt( 0 ) );

Até mais!!!

Não consegui utilizar o codigo acima.

Onde tenho de coloca-lo no metodo???

Vlw

rcoimbra,
Seria mais ou menos assim…

if ( Character.isWhitespace( str.charAt( 0 ) ) || Character.isLetter( str.charAt( 0 ) ) ) {
    super.insertString( offs, str, a );
}

Você está verificando se o caracter digitado é um espaço em branco OU uma letra. Caso algum satisfaça, vc insere no componente.

Valew LedRenan…

show de bola, obrigado pela força mesmo…

Deu certo…