Criando campo para valores de moeda com TextItem ?

21 views
Skip to first unread message

Fernando Paiva

unread,
Oct 31, 2013, 8:15:42 AM10/31/13
to gwt-b...@googlegroups.com
Estive procurando uma maneira de criar um campo TextItem para valores de moeda, não encontrei nada como precisava.
Eu quero fazer com que os valores sejam digitados da direita pra esquerda e q vá se formando a máscara.
Bem, como não encontrei nada, decidi então tentar criar algo na unha msm. 

Estou tentando fazer assim, se alguém puder ajudar, agradeço !

/**
* MoneyFieldTemplate extends TextItem para valores monetários R$
* @author Fernando Paiva
* @version 0.1
*/

public class MoneyFieldTemplate extends TextItem{
private final StringBuffer mask = new StringBuffer();
public MoneyFieldTemplate(String title){
setTitle(title);
setTextAlign(Alignment.RIGHT);
setWidth(150);
setRequired(true);
setValue("0,00");
setSelectOnFocus(true);

this.addKeyPressHandler(new KeyPressHandler() {
@Override
public void onKeyPress(KeyPressEvent event) {
/**
*regular expression regex para caracteres 
*/
mask.append(getValueAsString().replaceAll("^[0-9]",""));
/**
* verifica se a entrada eh valida se nao apaga o caracter na posicao do indice 
*/
for(int x = 0; x < mask.length(); x++){
if(!Character.isDigit(mask.charAt(x))){
mask.deleteCharAt(x);
}
}
/**
* adiciona virgula depois dos 2 primeiros zero a direita e adiciona zero depois da virgula
* exemplo: 0,00 = 
*/
if(mask.length() < 3){
if(mask.length() == 1){
mask.insert(0, "0");
mask.insert(0, ",");
mask.insert(0, "0");
}else if(mask.length() == 2){
mask.insert(0, ",");
mask.insert(0, "0");
}
}else{
mask.insert(mask.length() -2, ",");
}
/**
* adiciona pontos a mascara
* exemplo: 0.000,00 = -6 casas da direita pra esquerda
*/
if(mask.length() > 6){
mask.insert(mask.length() -6, ".");
if(mask.length() > 10){
mask.insert(mask.length() -10, ".");
if(mask.length() > 14){
mask.insert(mask.length() -14, ".");
}
}
}
setValue(mask.toString());
}
});
}

}


Se alguém puder ajudar a concluir, agradeço !










Carlos Eduardo

unread,
Oct 31, 2013, 8:19:42 AM10/31/13
to gwt-b...@googlegroups.com
Porque você não exibe a máscara (R$0,00) e cada dígito incluído você adiciona a essa máscara?
Não é o jeito mais bonito mas acredito que funcione!

Uma dica, não abra várias threads na lista para o mesmo problema, procure manter a mesma thread atualizada! :)

Att.


--
Carlos Eduardo Simões Pelegrin


--
Você está recebendo esta mensagem porque se inscreveu no grupo "GWT Google Web Toolkit Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para gwt-brasil+...@googlegroups.com.
Para postar neste grupo, envie um e-mail para gwt-b...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/gwt-brasil.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

Fernando Paiva

unread,
Oct 31, 2013, 9:06:43 AM10/31/13
to gwt-b...@googlegroups.com
Opa Carlos, firmeza ?

Então, eu não abri uma nova thread, são assuntos distintos, em uma eu perguntei se alguém ja havia feito e nesta eu estou tentando fazer ;)
Bem, não entendi bem sua dica de incluir digito ?

obrigado
--
      Fernando Paiva
      Java/PHP Developer
   Indústria de Botões Guaíra

Carlos Eduardo

unread,
Oct 31, 2013, 9:14:37 AM10/31/13
to gwt-b...@googlegroups.com
Ao meu ver é a mesma coisa, mas... apenas opinião!

A cada dígito q a pessoa incluir, você elimina um dígito na máscara e faz um concatena com a string digitada.

Vamos lá:

R$0,00 eu digito 1 o certo é R$0,01 então você pega pelo tamanho e seta o texto para o valor novo. Deixa o valor digitado guardado em uma variável.
novo dígito 2, o correto é R$0,12. Você pega o valor guardado e concatena com o valor novo, inclui a parte certa da máscara e por aí vai!

é um jeito meio "porco" mas funcionaria!

Outra coisa, em vez de fazer isso use validação com o regex, igual passei na outra thread!
é mais fácil!

Att.


--
Carlos Eduardo Simões Pelegrin


Fernando Paiva

unread,
Oct 31, 2013, 9:21:22 AM10/31/13
to gwt-b...@googlegroups.com
Opa Carlos, vlw pela dica.

Vc fala ao invés de usar regex usar aquele matches q vc fez ?
parece bem mais facil msm

att

Carlos Eduardo

unread,
Oct 31, 2013, 11:08:59 AM10/31/13
to gwt-b...@googlegroups.com
É, validar o campo no onBlur. 
O usuário tem que digitar certo senão vc enche as paciências dele com um alerta!

Att.


--
Carlos Eduardo Simões Pelegrin


Fernando Paiva

unread,
Nov 1, 2013, 7:22:33 PM11/1/13
to gwt-b...@googlegroups.com
opa, depois de muito quebrar a cabeça, enfim resolvido.


obrigado
Reply all
Reply to author
Forward
0 new messages