Olá pessoal, estou enfrentendo a seguinte dificuldade:
Tenho um campo com formato moeda seguindo o seguinte código:
java.text.DecimalFormat decimal = new java.text.DecimalFormat("#,###,###.00");
javax.swing.text.NumberFormatter numFormatter = new javax.swing.text.NumberFormatter(decimal);
numFormatter.setFormat(decimal);
numFormatter.setAllowsInvalid(false);
javax.swing.JFormattedTextField teste = new javax.swing.JFormattedTextField();
teste.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(numFormatter));
teste.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
Acontece que quando usuário digita algum valor e limpa o campo utilizando delete ou backspace, sempre fica restando o “,00” como faço para que este valor seja apagado também? Já tentei substituir a mascara por “#,###,###.##” mas neste caso sempre fica um número que nao é possível apagar também.
Alguém sabe como resolvo isso?
Valeu!
Encontrei uma opção para evento de botao, dando setText(null) no componente formatted, mas para fazer dando del ou backspace ta complicado, pois nao posso adicionar esse evento nessas teclas, uma vez que devem limpar somente um caractere por vez.
Emerson_Bolsoni
liberati,
Você disse que ta complicado colocar o evento quando o usuario teclar Del no campo certo…
Você ja tentou trabalhar com o evento KeyTyped passando como parametro o codigo ASCII da tecla Del???
Não tentei nada por aqui, mas me parece que dessa forma funciona…
Pois esse KeyEvent vai trabalhar quando for pressionada aquela tecla, executa uma ação…
tenta aí e se der certo, posta pra todos aqui no forum…
Abraços
L
liberali
opa, brigadão ai ebolsoni.
Bem, hoje continuei a quebrar a cabeça e consegui arrumar uma forma legal pra atender minhas necessidades...
Percebi que a propriedade setAllowsInvalid() quando setada como true deixa livre edição para o usuario e corrige depois que perde o foco.
Acontece que quando o usuario coloca o texto como vazio e tira o foco do componente, o valor antigo volta a aparecer.
Entao fiz a seguinte implementação p/ que isto nao aconteça:
publicclassMoedaTextFieldextendsJFormattedTextField{/** Creates a new instance of MoedaTextField */publicMoedaTextField(){java.text.DecimalFormatdecimal=newjava.text.DecimalFormat("#,###,###.00");javax.swing.text.NumberFormatternumFormatter=newjavax.swing.text.NumberFormatter(decimal);numFormatter.setFormat(decimal);numFormatter.setAllowsInvalid(true);setFormatterFactory(newjavax.swing.text.DefaultFormatterFactory(numFormatter));addFocusListener(newFocusListener(){publicvoidfocusGained(FocusEvente){}publicvoidfocusLost(FocusEvente){if(getText()==null||getText().length()<=0){setValue(null);}}});}}
Tranformei essa classe em um componente e adicionei a paleta do NetBeans. Ficou muito bom mesmo.
Espero que esta classe sirva como referencia para quem enfrenta esse problema.