Amigos tenho um jFormattedTextField, tem como eu ir digitando e ele ja ir formatando para moeda ?
Obrigado.
Amigos tenho um jFormattedTextField, tem como eu ir digitando e ele ja ir formatando para moeda ?
Obrigado.
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]/*
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 !