Máscara de banco

5 respostas
F

Como eu consigo fazer uma máscara num JFormattedTextField ou JTextField que seja igual banco?
Tipo, você começa a digitar e ele vai da direita pra esquerda adicionando.
Exemplo: Se eu digito só “152” automaticamente ele poe a vírgula após o 1.
Também poe os pontos quando tem milhar…

Todas as formas que tentei, mesmo as que vi aqui no fórum, não fazem esse tipo de coisa.

Obrigado,

5 Respostas

F

Um dos problemas que estou tendo nas máscaras normais é que se eu quiser ter, por exemplo:

123.432,12

e digitar 12343212

ele mostra:
12.343.212,00

F

Alguém, por gentileza, saberia fazer isso?

FernandoFranzini

JFormattedTextField formata quando perde o foco…para fazer ao digitar…acho q vc tem q usar JPlainDocument - http://www.guj.com.br/articles/29

F

FernandoFranzini:
JFormattedTextField formata quando perde o foco…para fazer ao digitar…acho q vc tem q usar JPlainDocument - http://www.guj.com.br/articles/29
Brigadão, cara.
Vou estudar isso e quando tiver conseguido posto aqui. Provavelmente possa ajudar outras pessoas.
Abraço,

F

Usando o Document não tive sucesso. Recebia exception e aquele “Atempt to mutate in notification”.

Resolvi criar uma classe que estende KeyAdapter e adicionei como um keylistener no TextField.
Eu acho que tá uma gambiarra, até porque ainda falta adicionar os pontos pra quando vira milhar e removê-los se deixar de ser milhar…
E ainda pular os números pra frente da vírgula enquanto for adicionando.

Classe:

/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
package visao;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JTextField;

/**
 *
 * @author Andre
 */
public class Filtro extends KeyAdapter {

    private String aux;

    @Override
    public void keyPressed(KeyEvent e) {
        super.keyPressed(e);
//        if (e.getKeyCode() != 8 && e.getKeyCode() != 127 ) {
//            this.aux = ((JTextField) e.getSource()).getText();
//            if (e.getSource() instanceof JTextField) {
//                ((JTextField) e.getSource()).setText(formataField());
//            }
//        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
//        super.keyReleased(e);
        this.aux = ((JTextField) e.getSource()).getText();
        ((JTextField) e.getSource()).setText(formataField(e.getKeyCode()));
    }

    @Override
    public void keyTyped(KeyEvent e) {
        super.keyTyped(e);
    }

    private String formataField(int codigo) {
//        if(!this.aux.matches("[0-9]*"))
//            return aux.replaceAll("[A-Za-z | ! | ]", "");
        if (codigo == 8) {
            if (this.aux.length() < 4) {
                return aux.replaceAll("[,|.]", "");
            }
        } else {
            if (this.aux.length() == 3) {
                String antes = this.aux.substring(0, 1);
                String depois = this.aux.substring(1);
                antes += ",";
                return antes.concat(depois);
            } else if (this.aux.length() > 2 && this.aux.length() < 5) {
            }
        }

        return this.aux;
    }
}
Criado 18 de agosto de 2011
Ultima resposta 4 de out. de 2011
Respostas 5
Participantes 2