Criei um textfield para guardar um valor numérico (preço), queria que essa caixa permitisse somente valores numéricos que no caso seria int, mas o usuário terá que digitar a vírgula para separar o real dos centavos.
Como eu posso fazer para que essa caixa aceite apenas valores numéricos e somente a vírgula como caractere?
Olá!!!
Não seria mais fácil em vez dos valores numérocos serem int, deixá-los como double?
Ou, fazer uma validação no seu textfield usando o split para fazer um replace na vírgula.
Espero ter ajudado;
Abraços;
Daniel…
fernandopaiva
Use esta classe no seu JTextField…
publicclassJMoneyFieldextendsJFormattedTextField{privateintiMaxLength;privatestaticfinallongserialVersionUID=-5712106034509737967L;privatestaticfinalSimpleAttributeSetnullAttribute=newSimpleAttributeSet();/** * Creates a new instance of JMoneyField */publicJMoneyField(intmaxlen){iMaxLength=maxlen;this.setHorizontalAlignment(JTextField.CENTER);this.setDocument(newMoneyFieldDocument());this.addFocusListener(newMoneyFieldFocusListener());this.setText("0,00");this.addCaretListener(newCaretListener(){publicvoidcaretUpdate(CaretEvente){if(e.getDot()!=getText().length()){getCaret().setDot(getText().length());}}});}privatefinalclassMoneyFieldFocusListenerextendsFocusAdapter{publicvoidfocusGained(FocusEvente){selectAll();}}privatefinalclassMoneyFieldDocumentextendsPlainDocument{privatestaticfinallongserialVersionUID=-3802846632709128803L;publicvoidinsertString(intoffs,Stringstr,AttributeSeta)throwsBadLocationException{Stringoriginal=getText(0,getLength());if(original.length()>=iMaxLength)java.awt.Toolkit.getDefaultToolkit().beep();if(original.length()<iMaxLength){StringBuffermascarado=newStringBuffer();if(a!=nullAttribute){remove(-1,getLength());mascarado.append((original+str).replaceAll("[^0-9]",""));for(inti=0;i<mascarado.length();i++){if(!Character.isDigit(mascarado.charAt(i))){mascarado.deleteCharAt(i);}}Longnumber=newLong(mascarado.toString());mascarado.replace(0,mascarado.length(),number.toString());if(mascarado.length()<3){if(mascarado.length()==1){mascarado.insert(0,"0");mascarado.insert(0,",");mascarado.insert(0,"0");}elseif(mascarado.length()==2){mascarado.insert(0,",");mascarado.insert(0,"0");}}else{mascarado.insert(mascarado.length()-2,",");}if(mascarado.length()>6){mascarado.insert(mascarado.length()-6,'.');if(mascarado.length()>10){mascarado.insert(mascarado.length()-10,'.');if(mascarado.length()>14){mascarado.insert(mascarado.length()-14,'.');}}}super.insertString(0,mascarado.toString(),a);}else{if(original.length()==0){super.insertString(0,"0,00",a);}}}}@Overridepublicvoidremove(intoffs,intlen)throwsBadLocationException{if(len==getLength()){super.remove(0,len);if(offs!=-1){insertString(0,"",nullAttribute);}}else{Stringoriginal=getText(0,getLength()).substring(0,offs)+getText(0,getLength()).substring(offs+len);super.remove(0,getLength());insertString(0,original,null);}}}}
Se estiver usando NetBeans basta ir em “Custom Creation Code” e invocar “new JMoneyField(10)” .
t+ e boa sorte.
M
miguel.satriani
eu uso o JFormattedTextField…
ex:
JFormattedTextField jFormattedTextField1 = new JFormattedTextField();
jFormattedTextField1.setFormatterFactory(new DefaultFormatterFactory(new NumberFormatter(new DecimalFormat("#0.00"))));