Problema com JFormattedTextField

5 respostas
S

Boa noite,

Eu tenho alguns campos formatados na minha aplicação (CNPJ, Telefone, Celular, Fax, CEP…). A tela onde eles se encontram é um cadastro de fornecedor, até então está ocorrendo tudo bem, eu consigo alterar os valores e incluir um fornecedor. O problema ocorre quando eu na alteração apago algum dos campos como por exemplo o CNPJ e tento salva-lo em branco, em seguida quando vou alterar o fornecedor o valor antigo ainda se encontra cadastrado. Gostaria de saber se tem alguma forma dele aceitar o campo em branco novamente.

Exemplo: Cadastro o fornecedor com o CNPJ 123456789, em seguida vou alterar este mesmo fornecedor e desejo limpar o campo CNPJ pois por ventura eu cadastrei o mesmo errado e não tenho como entrar em contato com o fornecedor agora para saber o certo. Ao limpar o campo e confirmar minha alteração a alteração é realizada com sucesso, mais ao verificar no banco o CNPJ continua o mesmo. Caso eu preencha todo o JFormattedTextField com outro valor a alteração ocorre tranquilamente, o problema é so se eu deixar o campo em branco ou não completar todo o campo com a quantidade de números informadas na mascara.

Existe alguma forma dele simplismente capturar o que eu informar no campo e dar um commit ?

Obrigado a todos

5 Respostas

fernandopaiva

Vc precisa setar o valor do jformatted para null

veja.

try {  
    MaskFormatter cnpjMask = new MaskFormatter("###.###.###/####-##");  
    MaskFormatter cpfMask = new MaskFormatter("###.###.###-##");  
  
    text.setValue(null); //aqui faz o que vc precisa
    if (optionCpf.isSelected()) 
        text.setFormatterFactory(new DefaultFormatterFactory(cpfMask));  
    else 
        text.setFormatterFactory(new DefaultFormatterFactory(cnpjMask));  
      
} catch (ParseException e) {  
    e.printStackTrace();  
}

t+ e boa sorte

samirrolemberg
private JTextField getTxtTel() {
		if (txtTel== null) {
			try {
				txtTel = new JFormattedTextField(new MaskFormatter("(##)####-####"));
				txtTel.setFocusLostBehavior(JFormattedTextField.COMMIT);
			} catch (ParseException e) {
			}
			txtTel.setBounds(new Rectangle(420, 225, 196, 31));
		}
		return txtTel;
	}

isso é o que eu faço normalmente no componente para ele não rescrever um valor antigo.

já para reiniciar um valor você pode setar vazio (e nao null) normalmente.

txtTel.setText("");
franzzita

Ressucitando o Tópico!

Pessoal, estou com um problema parecido.

Tenho um campo formatado no formato CEP, usando um MaskFormatter.
Acessei as propriedades do JFormattedTextField CEP > aba Código > Código de pré-criação e inseri :

try { formatoCEP = new MaskFormatter("##.###-###"); } catch(Exception erro) { JOptionPane.showMessageDialog(null, "Não foi possivel criar máscara de CEP"); }

Depois acessei as propriedades do JFormattedTextField CEP > aba Código > Criação de código personalizado e inseri:

new JFormattedTextField(formatoCEP);

Meu problema é, quando navego pelo formulário de cadastro ele não abastece os campos corretamente, quando não tem dado de CEP de um determinado cliente ele reexibe novamente o dado para o campo CEP da última consulta, mas quando aplico CampCEP.setText(""); usando a interface, ele some com os dados e mantem a máscara, ou seja, só preciso fazer com que o campo exiba o valor corretamente baseado no que vem do banco de dados.

Obrigada pela atenção galera.
Fico aguardando uma resposta…

Até.

samirrolemberg

o que eu postei ali em cima resolve parcialmente o seu problema.

franzzita

Percebi mesmo… eu tava fazendo Campo.setText("") em vez de Campo.setValue(null)… agora fiz Campo.setValue(null) antes de mostrar dados…

Obrigada.

Criado 25 de novembro de 2011
Ultima resposta 28 de nov. de 2011
Respostas 5
Participantes 4