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.
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());
}
});
}
}