Contagem de Caracteres em JTextField - RESOLVIDO

E ae galera,
beleza?

Seguinte,o que eu quero fazer é contar o número de caracteres em um textfield(e ir atualizando a cada caracter digitado).É porque se no banco de dados a coluna é de 30 caracteres eu quero que o usuário só possa digitar 30 caracteres no respectivo JTextField.Qual a melhor forma de fazer isso?É contanto e informando na interface o número de caracteres já digitados e o número máximo?

vlwww!

Você vai precisar implementar um keyListener e então fazer a contagem dos caracteres.

acho desnecessário fazer esse tipo de validação, pode apenas colocar um certo ponto de caracteres que vai poder digitar no seu JtextField…

ex:
campo_pesqu.setDocument(new JTextFieldFilter(JTextFieldFilter.NUMERIC,30));

nesse campo irá aceitar apenas 30 caracteres(conforme citei) e apenas receberá números.

ok,
então,eu adicionei um keylistener ao textfield e agora quando for implementar o método keyTyped eu tenho que contar quantos caracteres tem no textfield(nao sei fazer),guardar isso e exibir na interface né?Aí a cada tecla que for digitada esse número vai mudar e na interrace tb,certo?Só que eu não sei contar o caracteres no textfield,como faço isso?hehe
vlww

Você pega o texto e com a propriedade length da String faz e verificação, camarada.

[quote=lokit"s]acho desnecessário fazer esse tipo de validação, pode apenas colocar um certo ponto de caracteres que vai poder digitar no seu JtextField…

ex:
campo_pesqu.setDocument(new JTextFieldFilter(JTextFieldFilter.NUMERIC,30));

nesse campo irá aceitar apenas 30 caracteres(conforme citei) e apenas receberá números.

[/quote]

essa solução me parece mais fácil,mas como referenciar o textfield?Achei q o nome do textfield seria substituído em “campo_pesqu” mas não é isso,como faço lokits?E também,ao envés de NUMERIC,o que eu uso para aceitar todos os tipos de caracteres?
vlw!

@drsmachado
eu vo tentar aqui com o length tb,valeu pela ajuda cara!

[quote=lokit"s]acho desnecessário fazer esse tipo de validação, pode apenas colocar um certo ponto de caracteres que vai poder digitar no seu JtextField…

ex:
campo_pesqu.setDocument(new JTextFieldFilter(JTextFieldFilter.NUMERIC,30));

nesse campo irá aceitar apenas 30 caracteres(conforme citei) e apenas receberá números.

[/quote]

O único problema é que a JTextFieldFilter não existe na API do Java. Você provavelmente está falando da classe implementada aqui:
http://www.java-tips.org/java-se-tips/javax.swing/apply-special-filter-to-a-jtextfield.html

E, sim, o campo_pesq é o nome do JTextField.

sim tinha me esqueçido desse ponto Sorry !, mas eu tenhu ela implementada aqui no projeto,até postei ela uma vez em um tópico,só não lembro qual !

http://www.guj.com.br/java/242990-informar-erro-ao-digitar-numero-em-jtextfield

[quote=AlencarCanton]
@drsmachado
eu vo tentar aqui com o length tb,valeu pela ajuda cara![/quote]

Então, dentro do keyListener

String tam = jTextField.getText();
if(tam.length <= 30){
 return;
}else{
 jLabelAlerta.setText("Máximo de 30 caracteres para o jTextField");
}

Algo assim.

Não é uma boa prática usar Listeners. Nada impedirá seu usuário de recotar e colar dados com o mouse, e não disparar o listener. Além disso, pode haver variações nos comportamentos dos listeners entre diferentes plataformas.

O ideal é sempre utilizar o Document, caso a validação seja imediata, ou o InputVerifier, caso você valide apenas quando estiver saindo do campo. Nesse tópico, há um Document que restringe um JTextField a um determinado número de caracteres:

É uma boa você entender como o Document funciona, por isso, leia também esse artigo do GUJ:
http://www.guj.com.br/articles/29

implementei a classe JTextFieldFilter e importei,mas ainda to com problema pra chamar o método que setar o filtro,o “.setDocument”
tá dizendo que o pacote “tfSite” não existe,o que é?

@drsmachado
deu certo vei :smiley:
vlw!

lí o artigo e entendi,
só que na implementação da classe FixedLengthDocument,nessa parte do código:

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

diz que “s” foi declarado como private na PlainDocument,como arrumo isso?Pq não dá pra acessar atributo private de jeito nenhum,né?

vlw!

[comentei a linha do “if” e funcionou normal,realmente limitou o número de caracteres que podem ser digitados no textfield,vlw por toda ajuda galera!]

Você podia ter usado o fixedLenghtDocument que postei no outro tópico ali. Aquele era só copiar, colar e sair usando.

tava na cara do gol, chutou na trave!!! 8)

foi isso que eu fiz.
=D