[ RESOLVIDO ] Problema com JFormattedTextField

5 respostas
V

Boa tarde pessoal, tenho um JFormattedTexfField ( txtValor ) que recebe uma máscara de DecimalFormat.
Eu digito por exemplo: 1000… quando o foco sai do txtValor o campo é formatado para 1.000,00. Até aí tudo está perfeito!

O problema é que a classe JFormattedTexfField é cheia de bugs, se eu digito um valor, tiro o foco do txtValor , volto ao txtValor e apago o valor digitado, o último valor válido que foi digitado aparece no campo.

Então tentei usar o setFocusLostBehavior(JFormattedTextField.COMMIT), mas o problema é que se o usuário digitar um “espaço” ou um outro caracter qualquer que não seja um número ou uma vírgula antes do valor, a formatação se perde! :?:
Como posso resolver isso?

Segue abaixo o código em questão…

DecimalFormat decimal = new DecimalFormat("#,###,###.00"); NumberFormatter numFormatter = new NumberFormatter(decimal); numFormatter.setFormat(decimal); txtvlr.setFormatterFactory(new DefaultFormatterFactory(numFormatter)); txtvlr.setFocusLostBehavior(JFormattedTextField.COMMIT);

5 Respostas

ajfilho

Amigo, você já tentou implementar um evento lostFocus() e fazer as adaptações de acordo com sua necessidade?

Abraços!

V

ajfilho:
Amigo, você já tentou implementar um evento lostFocus() e fazer as adaptações de acordo com sua necessidade?

Abraços!


Caara, andei procurando, mas não consegui implementar nada!
Pode me ajudar com o lostFocus()?
Como posso fazer pra não perder a formatação?

V

Alguém aí pra ajudar?

tebosoftware

Eu já tive alguns problemas tb e acabei achando essa maneira de utilizar:

NumberFormat nf = NumberFormat.getNumberInstance();
NumberFormatter numFormatter = new NumberFormatter(nf);
txtvlr.setFormatterFactory(new DefaultFormatterFactory(numFormatter));
txtvlr.addFocusListener(new FocusAdapter() {

    @Override
    public void focusLost(FocusEvent e) {
        double valor = (Double) txtvlr.getValue();
        //codigos
    }
            
});

espero q ajude falow

V

tebosoftware:
Eu já tive alguns problemas tb e acabei achando essa maneira de utilizar:

NumberFormat nf = NumberFormat.getNumberInstance();
NumberFormatter numFormatter = new NumberFormatter(nf);
txtvlr.setFormatterFactory(new DefaultFormatterFactory(numFormatter));
txtvlr.addFocusListener(new FocusAdapter() {

    @Override
    public void focusLost(FocusEvent e) {
        double valor = (Double) txtvlr.getValue();
        //codigos
    }
            
});

espero q ajude falow

Vlw cara! Tu vai pro céu, hahaha!
Não tava me entendendo nessa parte da lógica de abrir um FocusAdapter e aí sobscrever o focusLost()

Criado 29 de junho de 2009
Ultima resposta 30 de jun. de 2009
Respostas 5
Participantes 3