FormattedTextField dinâmico

1 resposta
L

Fala galera, tenho um formattedTextField, e tenho um combobox com as opções, CPF e Nome. Caso o usuário marque a opção cpf, queria que ele utilizasse o formato "###.###.###-##", caso marque nome, o textfield voltaria a ficar em branco.

Já fiz a validação no código, mas creio que falta um método que faça com que o JFrame seja atualizado.

Alguém poderia me ajudar?

String S = (String) combo.getSelectedItem();

					if (S == "Nome") {
						memo.append(impressora.buscaNomeCliente(edt.getText()));
						
						
					}
					if (S == "CPF"){
						memo.append(impressora.buscaCpfCliente(edt.getText()));
						
						try {
							MaskFormatter mf = new MaskFormatter("###.###.###-##");
							mf.setPlaceholderCharacter('_');
							edt = new JFormattedTextField(mf);
							
							

						} catch (ParseException ex) {
							JOptionPane.showMessageDialog(null,
									"Formato do campo deve ser XXX.XXX.XXX-XX", "alerta",
									JOptionPane.ERROR_MESSAGE);
						}

1 Resposta

Preco

Acho que assim vai dar…

Você já verifica qual opção foi selecionada (nome ou cpf).

MaskFormatter mf = new MaskFormatter();
JFormattedTextField tf = new JFormattedTextField(mf);
tf.setFocusLostBehavior(JFormattedTextField.COMMIT);

if (cpf) {
   mf.setMask("###.###.###-##");
   tf.setValue(""); //Limpa o TextField    
} else { 
   mf.setMask("**************") // cada * corresponde a um caracter
   tf.setValue("");
}

No else, eu não sei se existe alguma solução que permita deixar a máscara com um número ilimitado de caracteres, já que o MaskFormatter trabalha com uma String como parâmetro, e não com uma expressão regular (que deixaria o componente bem mais utilizável…)

Nesse caso, eu sugeriria dar uma olhada nesse tópico, onde um colega sugere utilizar DocumentFilter ao invés de MaskFormatter…

http://www.guj.com.br/posts/list/29543.java

Té mais o/

Criado 26 de novembro de 2007
Ultima resposta 27 de nov. de 2007
Respostas 1
Participantes 2