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
Mascara de moeda
17 Respostas
NumberFormat formatter = NumberFormat.getCurrencyInstance();
formatter.setMaximumFractionDigits(2);//duas casas decimais
formatter.format(value)//se eu n me engano aceita String ou double ve ai
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
Desktop, web?
desktop
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]
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
Como assim de trás para frente?
Seja mais específico, por favor…
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);
}
}
JTextFieldDinheiro = new JTextField(8);
JTextFieldDinheiro .setDocument(new MonetarioDocument());
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
Oi, joellazzari
Foi do seu post mesmo que tirei a resposta. Malz ter esquecido de colocar a referência.

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.
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
show de bola, usei e tbm funcionou perfeitamente

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
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?
Também estou com este problema. alguém pode ajudar?
Obrigado.
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…