Rodrigo, nesse post o amigo conseguiu resolver o problema dele que é bem parecido com o seu… da uma olhada ai
Abs.
P
Papito1
Olá pessoal, sou novo no desevolvimento java se, e sobre esse assunto, casas decimais para um campo JTextfield, gostaria de entender como aplicar.
Peguei o código aqui e joguei numa classe nova. A funcionalidade é perfeita, exatamente o que preciso.
Mas não consegui aplicar no meu programa, para esse recurso aparecer dentro de um JTextfield.
Isso porque não quero usar o JFormattedTextField, porque está dando muito problema, como depois de digitar o valor, não consigo apagar o conteúdo digitado.
Por isso, preciso usar o JTextField.
S
staroski2 likes
Que problemas?
Se realmente quer insistir em usar o JTextField, você vai precisar criar um DocumentFilter para formatar números decimais.
Exemplo:
publicclassDecimalFilterextendsDocumentFilter{privateDecimalFormatdecimalFormat;publicDecimalFilter(){DecimalFormatSymbolssymbols=newDecimalFormatSymbols();symbols.setDecimalSeparator(',');symbols.setGroupingSeparator('.');decimalFormat=newDecimalFormat("#,##0.00",symbols);}@OverridepublicvoidinsertString(FilterBypassfb,intoffset,Stringstring,AttributeSetattr)throwsBadLocationException{StringBuildersb=newStringBuilder();sb.append(fb.getDocument().getText(0,fb.getDocument().getLength()));sb.insert(offset,string);if(isValid(sb.toString())){super.insertString(fb,offset,string,attr);}}@Overridepublicvoidreplace(FilterBypassfb,intoffset,intlength,Stringtext,AttributeSetattrs)throwsBadLocationException{StringBuildersb=newStringBuilder();sb.append(fb.getDocument().getText(0,fb.getDocument().getLength()));sb.replace(offset,offset+length,text);if(isValid(sb.toString())){super.replace(fb,offset,length,text,attrs);}}// Método auxiliar para verificar se a string é um número decimal válidoprivatebooleanisValid(Stringtext){if(text.isEmpty())returntrue;try{decimalFormat.parse(text);returntrue;}catch(Exceptione){returnfalse;}}}
Você pode implementar a classe MeuDocument estendendo PlainDocument e sobrescrever o método insertString para controlar a entrada de texto. Inicialize o campo com “0,00” e remova os zeros à direita conforme o usuário digitar:
importjavax.swing.text.AttributeSet;importjavax.swing.text.BadLocationException;importjavax.swing.text.PlainDocument;publicclassMeuDocumentextendsPlainDocument{@OverridepublicvoidinsertString(intoffs,Stringstr,AttributeSeta)throwsBadLocationException{// Verifica se o texto contém apenas números e até duas casas decimaisif(str!=null&&str.matches("\\d*\\.?\\d{0,2}")){// Remove os zeros à direitastr=removeZerosDireita(str);// Insere o textosuper.insertString(offs,str,a);}}privateStringremoveZerosDireita(Stringstr){// Remove os zeros à direitawhile(str.endsWith("0")){str=str.substring(0,str.length()-1);}// Remove o ponto decimal se for o último caractereif(str.endsWith(".")){str=str.substring(0,str.length()-1);}returnstr;}}