Salve galera!
Há alguma propriedade no JTextField que limite o numero de caracteres digitados pelo usuário(maxlength), qual é essa propriedade e, se não houver, como faço
para implementar isso no meu código?
PS(uso netbeans)
Vlw!!!
Salve galera!
Há alguma propriedade no JTextField que limite o numero de caracteres digitados pelo usuário(maxlength), qual é essa propriedade e, se não houver, como faço
para implementar isso no meu código?
PS(uso netbeans)
Vlw!!!
Eu conheço dois jeitos de fazer isso:
Exemplo em: http://download.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html
vlw Thiago, isso resolve o problema, brigadu!!!
Tem coisa é muito complicado, às vezes prefiro simplificar:
public static String maxlength(String str) {
String valor = "";
if(str.length() > 10){
valor = str.substring(0,10);
str = valor;
}
return str;
}
e no evento KeyReleased do componente:
private void JTextField1KeyReleased(java.awt.event.KeyEvent evt) {
JTextField1.setText(maxlength(JTextField1.getText()));
}
Da mesma forma dá pra fazer para limpar uma string de determinados caracteres, validar para somente numeros e etc…
public static String remove(String str) {
str = Normalizer.normalize(str, Normalizer.Form.NFD);
str = str.replaceAll("[./|-]", "");
return str;
}
public static String somentenumeros(String str) {
str = Normalizer.normalize(str, Normalizer.Form.NFD);
str = str.replaceAll("[ABCDEFGHIJLMNOPQRSTUVXZYWK ~!@#$%^&*()./:-abcdefghijlmnopqrstuvxzywk]", "");
return str;
}
public static String numerosepotos(String str) {
str = Normalizer.normalize(str, Normalizer.Form.NFD);
str = str.replaceAll("[ABCDEFGHIJLMNOPQRSTUVXZYWK ~!@#$%^&*():abcdefghijlmnopqrstuvxzywk]", "");
return str;
}
Por favor, não ressuscite tópicos de 3 anos atrás casualmente. Deixe destacado que se trata de um tópico ressuscitado e do porque.
As formas corretas de restringir o JTextField estavam na resposta original (JFormattedTextField ou Document). É geralmente uma péssima alternativa tratar de campos de texto via eventos de interface, como o KeyReleased. Há diversos artigos da Oracle desaconselhando a prática e há classes específicamente criadas para evitar isso, como a InputVerifier.
Eventos não são multiplataforma, podem ser disparados em momentos que não estamos prevendo, e nem sempre é possível imaginar todos os eventos que podem ocorrer num JTextField. Se quer usar um evento, use os do Document. Esses sim, são disparados quando há modificação no texto, não importando como a modificação ocorreu.
Por exemplo, sua solução já não funcionaria se o usuário usasse o comando “colar” com o mouse, já que esse comando não dispara o evento de KeyReleased.
Ok, mas colando ambém funciona, e eu ja tinha até usado document, mas se eu quisesse limitar o campo com um tipo de MaxLength e limitar ao digitar com somente numeros e formatar ao sair do dampo e ou criar uma mascara simples limitando determinados caracteres como .-/, pq se eu limitasse usando document como somente sumeros aí ele não formataria o campo, e pra quem usa netbenas usando o swing facilitaria, pois no swing usando JTextField não milita o campo com o metodo setColumns()
Colando com o mouse e clicando para sair com o mouse do campo, não funciona. Eu já passei por esse problema. Sem falar nos problemas em outras plataformas. Se funciona no seu computador, teste num Linux ou num Mac. E o problema certamente vai se manifestar.
O resto da sua frase está com caracteres errados, sem pontuação e sem coerência lógica. Mas do pouco que pude entender:
a) Se você precisa de formatação no campo, use um JFormattedTextField;
b) Se você não precisa, use o Document;
Em momento nenhum, ninguém, em post nenhum, falou em usar o setColumns. Esse método não é, e nunca foi, relacionado a quantidade de caracteres máximos que podem ser digitados. A função do setColumns é só definir um valor para o preferredMaxSize do JTextField de modo que aquele número de caracteres seja visível.