Formatação de valores monetarios

12 respostas
J

galera tenho um JFormattedTextField que recebera valores monetarios (R$)
gostaria que na medida que o usuario fosse digitando o valor este numero ja fosse formatado ! ex:

1234 igual a 12,34
1000 igual a 1000,00

obrigado !
Josimar

12 Respostas

J
1. /* 
   2.  * Moeda.java 
   3.  * 
   4.  * Created on 24 de Fevereiro de 2005, 21:09 
   5.  */  
   6.   
   7. import java.text.DecimalFormat;  
   8. import java.text.DecimalFormatSymbols;  
   9. import java.util.Locale;  
  10.   
  11. /** 
  12.  * Classe que padroniza a internacionalizacao de valores monetarios 
  13.  * @author Luiz Cavalcanti 
  14.  * @version 0.1 
  15.  * @see java.util.Locale 
  16.  * @see java.text.DecimalFormat 
  17.  * @see java.text.DecimalFormatSymbols 
  18.  */  
  19. public final class Moeda {  
  20.       
  21.     /** 
  22.      * Simbolos especificos do Dolar Americano 
  23.      */  
  24.     private static final DecimalFormatSymbols DOLAR = new DecimalFormatSymbols(Locale.US);  
  25.     /** 
  26.      * Mascara de dinheiro para Dolar Americano 
  27.      */  
  28.     public static final DecimalFormat DINHEIRO_DOLAR = new DecimalFormat("¤ ###,###,##0.00",DOLAR);  
  29.     /** 
  30.      * Simbolos especificos do Euro 
  31.      */  
  32.     private static final DecimalFormatSymbols EURO = new DecimalFormatSymbols(Locale.GERMANY);  
  33.     /** 
  34.      * Mascara de dinheiro para Euro 
  35.      */  
  36.     public static final DecimalFormat DINHEIRO_EURO = new DecimalFormat("¤ ###,###,##0.00",EURO);  
  37.     /** 
  38.      * Locale Brasileiro 
  39.      */  
  40.     private static final Locale BRAZIL = new Locale("pt","BR");  
  41.     /** 
  42.      * S�mbolos especificos do Real Brasileiro 
  43.      */  
  44.     private static final DecimalFormatSymbols REAL = new DecimalFormatSymbols(BRAZIL);  
  45.     /** 
  46.      * Mascara de dinheiro para Real Brasileiro 
  47.      */  
  48.     public static final DecimalFormat DINHEIRO_REAL = new DecimalFormat("¤ ###,###,##0.00",REAL);  
  49.       
  50.     /** 
  51.      * Mascara texto com formatacao monetaria 
  52.      * @param valor Valor a ser mascarado 
  53.      * @param moeda Padrao monetario a ser usado 
  54.      * @return Valor mascarado de acordo com o padrao especificado 
  55.      */  
  56.     public static String mascaraDinheiro(double valor, DecimalFormat moeda){  
  57.         return moeda.format(valor);  
  58.     }  
  59. }
J
L

junior para que serve o simbolo "¤"
Valeu !

L

Licuri serve o simbolo “¤” serve para exibir o Label monetário, no caso do Brasil exibe o R$.
Espero ter ajudado.

L

Licuri:
junior para que serve o simbolo "¤"
Valeu !

Licuri serve o simbolo “¤” serve para exibir o Label monetário, no caso do Brasil exibe o R$.
Espero ter ajudado.

J

Licuri Isso que colega falou ai em cima ! é o teu caso ne ?

J

josimarsis Mostra tua classe ai tua Entidade !

L

Oi,

De uma olhada no componente JMoneyField feito pelo usuário dyorgio.

Poderá lhe ajudar e muito.

http://www.guj.com.br/posts/list/97891.java

Tchauzin!

J

lina Bom dia Valeu !

E

UP, Obrigado.

M

Muito bom pessoal, me ajudou muito, no meu caso estou usando no android. Funcionou perfeitamente.

Desde ja grato.

Marcos Angelo
Android Developer.

T
Cara,

recentemente eu fiz uma gambiarra, mas tah funcionando. Ele usa um jtextfield mesmo.

1- Adicione o evento keyreleased ao jtextfield;

private void jTextField1KeyReleased(java.awt.event.KeyEvent evt) {

// TODO add your handling code here:

char tecla = evt.getKeyChar();

if(tecla == KeyEvent.VK_ENTER){

this.jTextField3.requestFocus();

}else{

formatJTextNumber(this.jTextField2);

}

public static void formatJTextNumber(javax.swing.JTextField jtextfield){

String regex = [0-9];

String valorAtual = jtextfield.getText();

String CaracterDigitado = 0;

try {

CaracterDigitado = jtextfield.getText().substring(jtextfield.getText().length() - 1, jtextfield.getText().length() - 0);

} catch (java.lang.StringIndexOutOfBoundsException e) {

CaracterDigitado = jtextfield.getText().substring(jtextfield.getText().length() - 0, jtextfield.getText().length() - 0);

}
Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(CaracterDigitado);
    boolean b = m.matches();
    if(b == false){
        try {
            valorAtual = jtextfield.getText().substring(0, jtextfield.getText().length() - 1);
        } catch (java.lang.StringIndexOutOfBoundsException e) {
            valorAtual = jtextfield.getText().substring(0, jtextfield.getText().length() - 0);
        }
    }
    String valorAtualReplaced = valorAtual.replace(",", "");
    
    //separe os doois ultimos digitos
    String centavos = "";
    try {
        centavos = valorAtualReplaced.substring(valorAtualReplaced.length() - 1, valorAtualReplaced.length()-0);
    } catch (java.lang.StringIndexOutOfBoundsException e) {
    }
    String decimal = "";
    try {
        decimal = valorAtualReplaced.substring(valorAtualReplaced.length() - 2, valorAtualReplaced.length() - 1);
    } catch (java.lang.StringIndexOutOfBoundsException e) {
    }
    //a parte restante é a parte inteira
    String inteira = "";
    try {
        inteira = valorAtualReplaced.substring(0, valorAtualReplaced.length() - 2);
    } catch (java.lang.StringIndexOutOfBoundsException e) {
        inteira = "0";
    }
    //reconfigure os jtext
    String separator = ",";
    String valorSaida = "";
    
    //configura a parte inteira
    if(inteira.equals("") == true){
        inteira = "0";
    }
    int length = inteira.length();
    String subInteira = inteira.substring(0,1);
    if(length == 2 && subInteira.equals("0") == true){
        inteira = inteira.substring(1);
    }
    //configura o valor de saída
    valorSaida = inteira + separator + decimal + centavos;
    jtextfield.setText(valorSaida);
    
}

Tenta aí, valeu!

Criado 20 de julho de 2007
Ultima resposta 16 de mai. de 2012
Respostas 12
Participantes 8