Campo de valor num TextField

5 respostas
Romeo

Estou com dificuldades para criar um TextField q aceite um valor com duas casas decimais, o campo deve mostrar ____. e o usuario ao digitar insere da direita para a esquerda(tendo que digitar dois zeros caso seja um inteiro).

Tentei fazer destes dois jeitos, mas em vão…

try{

valor = new MaskFormatter("#######.##");

valor.setValidCharacters([telefone removido]);

valor.setOverwriteMode(true);

valor.setPlaceholder("");

}

e
DecimalFormat valor = new DecimalFormat("##.##");

NumberFormatter textFormatter = new NumberFormatter(valor);

textFormatter.setOverwriteMode(true);

textFormatter.setAllowsInvalid(false);

Alguém sabe qual código resolve este problema, obrigado pela atenção, Romeo…

5 Respostas

Romeo

o problema é que no MaskFormatter é necessário saber a quantidade de digitos ou caracteres a serem inseridos, e como é valor não dá pra definir.

Já vi em alguns programas ele mostrar a data desta maneira:

| , |

desta maneira ao inserir por exemplo 12,34…

| , 1|
| ,12|
| 1,23|
| 12,34|

sei que não é trivial, mas minha chefe(sim, é uma mulher) quer deste jeito…
Obrigado pela atenção, Romeo…

T

MaskFormatter e JFormattedTextField são bastante difíceis de mexer, e não permitem esse tipo de entrada. Eu se tivesse tempo fazia uma classe derivada de JTextField só para entrada de moeda, sem usar MaskFormatter - porque o usuário a) Não deve entrar com vírgulas ou pontos; b) Não deve ser obrigado a entrar com vírgulas ou pontos.

Romeo

Muito obrigado pessoal, me ajudaram muito mesmo, até mais…

raikk0n3n

Devez vc usar o TextField use o TextFormattedField

isso q vc esta usado são propriedades do TextFormattedField

CEP = new javax.swing.JFormattedTextField();

MaskFormatter maskcep;
        try {
            maskcep = new MaskFormatter("#####-###");
            maskcep.setValidCharacters("[telefone removido]");
            maskcep.install(CEP);
        } catch(Exception ex) {
            ex.printStackTrace();
        }
        CEP.updateUI();
raikk0n3n

Em TextFormattedField use isso:

DecimalFormat decimal = new DecimalFormat("#,##0.00");
 		NumberFormatter numFormatter = new NumberFormatter(decimal);
 		numFormatter.setFormat(decimal);
 		numFormatter.setAllowsInvalid(false);
 		SEUTextFormattedField.setFormatterFactory( new DefaultFormatterFactory(numFormatter));
Criado 17 de novembro de 2006
Ultima resposta 20 de nov. de 2006
Respostas 5
Participantes 3