Tem como eu digitar e ele ja ir formatando para moeda?

Amigos tenho um jFormattedTextField, tem como eu ir digitando e ele ja ir formatando para moeda ?

Obrigado.

Tem sim…

:thumbup:

OKAY VC PODE DAR EXEMPLOS ?

Clique no “Tem sim…” do amigo ali de cima.

Olá Marcio,

Não me leve a mal, não precisa se estourar e escrever
em CAIXA_ALTA bastava ter clicado no link que existe na resposta.

Bom pra não sobrar nenhuma duvida vai a URL:
http://www.guj.com.br/posts/list/64872.java

Boa sorte! :thumbup:

nao amigo. nao estava bravo, nao rssss

caixa alta… foi sem querer…

okay,. vi o código. agora vc poderia me dizer como eu faco que assim eu ir digitando ele chame essa classe …

melhor. vi o coidogo mais nao sei como usa-lo.

obrigado.

Inclua a classe no seu projeto, e troque os JFormattedTextField que você tem no seu programa (que precisam de entrada monetária) por JMoneyField

ta… entendi. eu uso netbeans… eu coloquei essa classe no nb… e agora como faco para acrescenta esse novo comp… eu vou ter que fazer na maão?

outra teria como eu usar o jtextFormated … ??

Para acrescentar esse componente no NetBeans, é necessário acrescentá-lo à palette, por exemplo.
Outra forma é arrastar a classe diretamente para o seu diálogo ou form no editor visual do NetBeans; o NetBeans entende que esse é um JFormattedTextField (todo JMoneyField é um JFormattedTextField) e consegue visualizar e editar esse componente.
Isso é muito legal no NetBeans; desde que o componente herde de um JComponent e tenha um construtor sem parâmetros, e possa ser inicializado sem depender de outras coisas no seu programa, é possível usar o componente no editor visual.

opaa parece que deu certo.

viu e tem como eu acrescenta a paleta ?

Eu só recomendo adicionar à palette quando você tem um componente que vai usar em todos os seus sistemas e que não vai dar confusão na hora de distribuir seus sistemas. (Ou seja, normalmente isso é feito em um sistema grande, onde trabalha um monte de gente, e há alguém para gerenciar esses componentes comuns a todos os módulos do sistema.)

Normalmente eu acho mais simples copiar o fonte para seu projeto, e arrastar o componente para dentro da tela que você está desenhando.

eu disse iso pq realmente vou comecar um grande projeto.

Olá, tudo bem???
Estive vendo tua duvida sobre O Text Moeda, não sei se já resolveu, mas isso pode ajuda-lo

private static final Locale BRAZIL = new Locale(“pt”,“BR”);
private static final DecimalFormatSymbols REAL = new DecimalFormatSymbols(BRAZIL);
public static final DecimalFormat DINHEIRO_REAL = new DecimalFormat("###,###,##0.00",REAL);

public static String mascaraDinheiro(double valor, DecimalFormat moeda){
return moeda.format(valor);

isso formata no formato moeda, agora você tem que aplica-lo ao código.

Esperamos que isso ajude…

O nosso aki ficou dessi jeito…
é só add na paleta e compilar

[code]/*

  • jTextMoeda.java
  • Created on 9 de Novembro de 2007, 16:59
    */

package JTextMoeda;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
import javax.swing.JOptionPane;

/**
*

  • @author mauro
    */
    public class jTextMoeda extends javax.swing.JPanel {

    /** Creates new form jTextMoeda */
    public jTextMoeda() {
    initComponents();
    }

    /** This method is called from within the constructor to

    • initialize the form.

    • WARNING: Do NOT modify this code. The content of this method is

    • always regenerated by the Form Editor.
      */
      // //GEN-BEGIN:initComponents
      private void initComponents() {
      jTextMoeda = new javax.swing.JTextField();

      jTextMoeda.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
      jTextMoedaActionPerformed(evt);
      }
      });
      jTextMoeda.addFocusListener(new java.awt.event.FocusAdapter() {
      public void focusGained(java.awt.event.FocusEvent evt) {
      jTextMoedaFocusGained(evt);
      }
      public void focusLost(java.awt.event.FocusEvent evt) {
      jTextMoedaFocusLost(evt);
      }
      });
      jTextMoeda.addKeyListener(new java.awt.event.KeyAdapter() {
      public void keyReleased(java.awt.event.KeyEvent evt) {
      jTextMoedaKeyReleased(evt);
      }
      });

      javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
      this.setLayout(layout);
      layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addComponent(jTextMoeda, javax.swing.GroupLayout.DEFAULT_SIZE, 109, Short.MAX_VALUE)
      );
      layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addComponent(jTextMoeda)
      );
      }// //GEN-END:initComponents

    private void jTextMoedaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextMoedaActionPerformed
    jTextMoeda.transferFocus();
    }//GEN-LAST:event_jTextMoedaActionPerformed

    private void jTextMoedaKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextMoedaKeyReleased
    double valor = 0;

     if (jTextMoeda.getText().length() != 0) {
         String str = jTextMoeda.getText();
         str = str.replace(',','.');
         try {
             valor = Double.parseDouble(str);
         } catch (java.lang.NumberFormatException ex) {
             jTextMoeda.setText("");
             JOptionPane.showMessageDialog(null, "Esse campo só aceita números \n Ex.: 380,52", "ATENÇÃO",
                     JOptionPane.INFORMATION_MESSAGE);
             jTextMoeda.grabFocus();
             
         }
     }
    

    }//GEN-LAST:event_jTextMoedaKeyReleased

    private void jTextMoedaFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextMoedaFocusLost
    if (jTextMoeda.getText().trim().compareTo("") != 0){
    String str = jTextMoeda.getText();

         str = str.replaceAll("\\.","");
         str = str.replace(',','.');
         str = mascaraDinheiro(Double.parseDouble(str),DINHEIRO_REAL);
         jTextMoeda.setText(str);
     }else
         jTextMoeda.setText("0,00");
    

    }//GEN-LAST:event_jTextMoedaFocusLost

    private void jTextMoedaFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextMoedaFocusGained
    if (jTextMoeda.getText().trim().compareTo("") != 0){
    String str = jTextMoeda.getText();

         str = str.replaceAll("\\.","");
         jTextMoeda.setText(str);
         jTextMoeda.selectAll();
         
     }
    

    }//GEN-LAST:event_jTextMoedaFocusGained

    // Declaração de variáveis - não modifique//GEN-BEGIN:variables
    private javax.swing.JTextField jTextMoeda;
    // Fim da declaração de variáveis//GEN-END:variables

    private static final Locale BRAZIL = new Locale(“pt”,“BR”);
    private static final DecimalFormatSymbols REAL = new DecimalFormatSymbols(BRAZIL);
    public static final DecimalFormat DINHEIRO_REAL = new DecimalFormat("###,###,##0.00",REAL);
    // ¤
    public static String mascaraDinheiro(double valor, DecimalFormat moeda){
    return moeda.format(valor);
    }
    }[/code]

Galera, eu usei o codigo q eu achei nesse post:
http://www.guj.com.br/posts/list/64872.java

O negocio funciona bem, o unico problema é que quando eu uso o setValue e vou editar ele não formata o valor quando eu estou digitando. Ele só formata depois q o campo perde o foco.

Será que alguém consegue dar uma luz ?

Eu fiz uma engenharia alternativa (conhecida popularmente com Programação Orientada a Gambiarra) e funcionou.

Fiz assim, no form q eu estou utilizando esse JFormattedTextField eu fiz o metodo de KeyReleased pra ele. Aí quando alguma tecla é digitada outro campo pega o foco e depois eu retorno o foco pra ele. Assim:

private void tfNovoValorEditaReajKeyReleased(java.awt.event.KeyEvent evt) {                                                 
    tfValAntEditaReaj.grabFocus();
    tfNovoValorEditaReaj.grabFocus();
}

Funcionou legal, agora o problema é q ele vai digitando quantos caracteres quiser, até dar erro. Como eu posso arrumar isso ??

Vlw

cara… implementei um KeyListener:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.text.DecimalFormat;

import javax.swing.JTextField;

public class ValorMasc implements KeyListener {
	
	JTextField caixaTexto;
	
	DecimalFormat formato;
	
	int inteiro, decimal;
	
	public ValorMasc(JTextField jt, int tam, int dec){
		
		caixaTexto = jt;
		inteiro = tam-dec;
		decimal = dec;
		
		String mascara = "";
		
		if((tam-dec)>0){
			for(int a=0; a<dec; a++){mascara += "0";}
			if(mascara.length()>0){mascara = "."+mascara;}
			for(int a=0; a<tam-dec; a++){
				mascara = "#"+mascara;
				if(((a+1)%3)==0 && (a+1)<(tam-dec)){mascara = ","+mascara;}
			}
		}
		formato = new DecimalFormat(mascara);
	} 

	public void keyTyped(KeyEvent e) {   
        char c = e.getKeyChar();   
        String textNum = caixaTexto.getText().replace(".","").replace(",","");
          if(!Character.isDigit(c) || textNum.length()>=(inteiro+decimal) ){   
             
            	 e.consume(); 
             
          }      
           
     }   

     public void keyPressed(KeyEvent e) {  

     }   

     public void keyReleased(KeyEvent e) {
    	 
       	 String textoAntes = caixaTexto.getText();
        	 
        	if(textoAntes.replace(".","").replace(",","").length()<=decimal){
        		if(inteiro>=decimal){
        			caixaTexto.setText(textoAntes.replace(".","").replace(",",""));
        		}else{
        			
        		}
            }
            else if(textoAntes.replace(".","").replace(",","").length()>decimal){
            	Double num = 0.0;
               	String textNum = textoAntes.replace(".","").replace(",","");
               	if(decimal>0){
               		textNum = textNum.substring(0,textNum.length()-decimal)+"."+textNum.substring(textNum.length()-decimal,textNum.length());
               	}else{
               		textNum = textNum+".0";
               	}

               	try{
            		num = Double.parseDouble(textNum);
            	}catch (Exception exp) { }
            	
            	
            	
            	
            	String fim = formato.format(num);
            	if(fim.substring(0,1).equals(",")){fim = "0"+fim;}
            	caixaTexto.setText(fim);
            	
            	
            	
            }
    	 
     }
	
}

e vc usa assim…:

JTextField j = new JTextField();
j.setHorizontalAlignment(JTextField.RIGHT);
int qtdeDigitos = 10;
int parteDecimal = 3;
j.addKeyListener(new ValorMasc(j,qtdeDigitos,parteDecimal));

opa, funcionou lindo !

vou testar e qqer coisa eu falo !

vlw !

Mais sugestões:
http://www.guj.com.br/posts/list/66440.java