Mascara de moeda

17 respostas
renatomattos2912

Galera queria saber se alguem ja conseguiu fazer uma mascara monetaria de forma simples pois todos os codigos q achei nao resolveram o meu problema lem de serem muito complicados, caso alguem possa me ajudar, nao estou pedindo o codigo mas sim uma ajuda pra min tentar desenvolver esta mascara. vw

17 Respostas

Alchemist
NumberFormat formatter = NumberFormat.getCurrencyInstance();
formatter.setMaximumFractionDigits(2);//duas casas decimais
formatter.format(value)//se eu n me engano aceita String ou double ve ai
renatomattos2912

valeu cara isso ate serviu de alguma forma so q o q eu queria mesmo era q o numero fosse formatado enquanto o usuario digitasse

B

Desktop, web?

renatomattos2912

desktop

franciscossouza

Usando Swing? Dê uma olhada em MaskFormatter e JFormattedTextField:

[list]http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/text/MaskFormatter.html[/list]
[list]http://www.java2s.com/Tutorial/Java/0240__Swing/0340__JFromattedField-MaskFormatter.htm[/list]

renatomattos2912

isso nao adiantaria se eu conseguisse preencher de tras pra frente, eu consigo escrever de traz pra frente mas em nenhum moento consegui preencher uma mascara de tras pra frente se alguem souber como me avise

franciscossouza

Como assim de trás para frente?

Seja mais específico, por favor…

D
Hey! Tenta essa classe.
import javax.swing.text.*;     
public class MonetarioDocument extends PlainDocument {     
     
public static final int NUMERO_DIGITOS_MAXIMO = 12;     
     
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {     
     
  String texto = getText(0, getLength());     
  for (int i = 0; i < str.length(); i++) {     
      char c = str.charAt(i);     
      if (!Character.isDigit(c)) {     
          return;     
      }     
  }     
     
   if(texto.length() < this.NUMERO_DIGITOS_MAXIMO){     
          super.remove(0, getLength());     
      texto = texto.replace(".", "").replace(",", "");     
      StringBuffer s = new StringBuffer(texto + str);     
     
   if (s.length() > 0 && s.charAt(0) == '0') {     
       s.deleteCharAt(0);     
   }     
     
   if(s.length() < 3) {     
     if (s.length() < 1) {     
         s.insert(0,"000");     
     }else if (s.length() < 2) {     
         s.insert(0,"00");     
   }else{     
    s.insert(0,"0");     
    }     
   }     
     
  s.insert(s.length()-2, ",");     
     
  if(s.length() > 6) {     
    s.insert(s.length()-6, ".");     
  }     
     
  if(s.length() > 10) {     
    s.insert(s.length()-10, ".");     
  }     
     
  super.insertString(0, s.toString(), a);     
  }     
}     
     
  public void remove(int offset, int length) throws BadLocationException {     
    super.remove(offset, length);     
      String texto = getText(0, getLength());     
      texto = texto.replace(",", "");     
      texto = texto.replace(".", "");     
    super.remove(0, getLength());     
    insertString(0, texto, null);     
  }     
     
}
Só usar assim:
JTextFieldDinheiro = new JTextField(8);   
JTextFieldDinheiro .setDocument(new MonetarioDocument());
Código postado pelo Mark_Ameba aqui no GUJ. Conseguido no post http://www.guj.com.br/posts/list/132765.java
J

oi, bom dia
abri um tópico ontem, 19/07/09, que trata dessa última classe e de uma outra, para tratar a entrada de textos, se alguém puder dar uma olhada acho que seria útil para várias pessoas:
Mascaras e Validação em JTextField

D

Oi, joellazzari
Foi do seu post mesmo que tirei a resposta. Malz ter esquecido de colocar a referência.
:wink:

J

olá Dantalian, td bem?
Não tem problema nenhum deixar de colocar a referência.

Minha intenção é criar uma classe onde (que extenda PlainDocument e controle JTextField) eu possa fazer a entrada de dados de forma facilitada.

Imagino uma classe única que controle strings (limitando o número de caracteres, fazendo aceitar somente letras, ou somente números, não aceitar caracteres especiais, que troque enter por tab no JTextField, etc). Futuramente, pode-se extender isso para receber data, telefones, cpf, cnpj, cep, etc.

Mas ai vou precisar de ajuda, pois não sei fazer isso de uma forma clara.

renatomattos2912

valeu cara vc é meu salvador agora sim o programa ta profissional vlw mesmo e pra quem quiser implementar essa classe pode usar que funciona perfeitamente

Matheus_Prado

show de bola, usei e tbm funcionou perfeitamente

:wink:

Eduardo_Rebou_s

Galera desculpa estar trazendo esse topico de novo, mas é que estou com um problema na hora de setar o texto no MonetarioDocument().

quando eu digito o texto vai certinho, porém quando trago o valor do banco de dados e seto pelo setText() ele fica 0,00.

alguém sabe como resolver?

Muito Obrigado

Eduardo

lordbonne

Eduardo Rebou?s:
Galera desculpa estar trazendo esse topico de novo, mas é que estou com um problema na hora de setar o texto no MonetarioDocument().

quando eu digito o texto vai certinho, porém quando trago o valor do banco de dados e seto pelo setText() ele fica 0,00.

alguém sabe como resolver?

Muito Obrigado

Eduardo

Cara, tow com o mesmo problema que vc, preciso setar para o campo um valor do banco de dados, mas com o setValue, quando o campo perde o foco, gera um erro…
Como posso setar um valor direto para o campo?

lucasmartins

Também estou com este problema. alguém pode ajudar?
Obrigado.

lordbonne

Cara, eu fiz isso daqui:

try{
               if(setar.substring(setar.length()-2,setar.length()-1).equals(".")){
                    txtValor.setText(setar.replace(".", "") + "0");
                }else{
                    txtValor.setText(setar.replace(".", ""));
                }

            } catch (StringIndexOutOfBoundsException ex) {
                if(setar.substring(setar.length()-2,setar.length()-1).equals(".")){
                    txtValor.setText(setar.replace(".", "") + "0");
                }else{
                    txtValor.setText(setar.replace(".", ""));
                }
            }

Vê se resolve pra vc tbm… flws, abrasss
PS: “setar” é a minha string com o valor do banco…

Criado 15 de julho de 2009
Ultima resposta 10 de out. de 2011
Respostas 17
Participantes 10