Esse é um exemplo do que tento fazer. É só copiar e rodar, dão uma olhada no erro que dá, isso era para funcionar.
Toda vez que o usuário digita um carácter ele verifica se é uma letra e se for ele remove a última digitada.
Você não pode chamar o método setText() dentro do evento CaretListener, pois isso causaria outro evento CaretListener.
Neste caso acho que você deveria usar o evento keyReleased.
Dá uma olhada nas alterações que fiz no código:
Só mais uma sugestão Ferreira. Caso vc tenha a necessidade de utilizar mais campos com a validação somente dígitos.
Nos aki criamos esta classe que herda de "jTextField" mas que não permite a entrada de dados que não sejam números.
Você pode usa-lá no lugar do JText..
Bom então segue aí ..
importjavax.swing.JTextField;importjavax.swing.text.AttributeSet;importjavax.swing.text.BadLocationException;importjavax.swing.text.PlainDocument;/** * @author Evandro * @author Thiago * 13/06/2008 */publicclassNumberFieldextendsJTextField{privatestaticfinallongserialVersionUID=991963450143845631L;/** * Constructor */publicNumberField(){}/** * Constructor * @param text */publicNumberField(Stringtext){super(text);setDocument(newPlainDocument(){privatestaticfinallongserialVersionUID=-6744534142990587378L;@OverridepublicvoidinsertString(intoffs,Stringstr,AttributeSeta)throwsBadLocationException{// usually only one letter is inserted at a time,// but doing so also prevents the user case// paste some textfor(inti=0;i<str.length();i++)if(Character.isDigit(str.charAt(i))==false){return;}super.insertString(offs,str,a);}});}}
gqferreira
Gostei da sua idéia aguiaMem,importei a classe NumberField, troquei os meus JTextField por NumberField, rodo e não dá erro mas também não mudou nada.