Problemas com formatação de CPF

6 respostas
arthurgon

Olá pessoal;

Estou com um problema de formatação de um textField que deve receber um numero de CPF. O problema é que
o campo aparece completado com zeros. Minha idéia é que o usuário digite o CPF respeitando a máscara.
Como faço para que esses ZEROS não apareçam?
O código está assim:

///////Esse é o método//////

public class Util {

	/*
	 * 2. * realiza a formatação do valor de acordo com a mascara enviada 3.
	 */
	public static String formatar(String valor, String mascara) {

		String dado = "";
		// remove caracteres nao numericos
		for (int i = 0; i < valor.length(); i++) {
			char c = valor.charAt(i);
			if (Character.isDigit(c)) {
				dado += c;
			}
		}

		int indMascara = mascara.length();
		int indCampo = dado.length();

		for (; indCampo > 0 && indMascara > 0;) {
			if (mascara.charAt(--indMascara) == '#') {
				indCampo--;
			}
		}

		String saida = "";
		for (; indMascara < mascara.length(); indMascara++) {
			saida += ((mascara.charAt(indMascara) == '#') ? dado
					.charAt(indCampo++) : mascara.charAt(indMascara));
		}
		return saida;
	}

	public static String formatarCpf(String cpf) {
		while (cpf.length() < 12) {
			cpf = "0" + cpf;
		}
		return formatar(cpf, "###.###.###-##");
	}


E essa é a classe que recebe o método:

labelDocumento = new Label(this, SWT.NONE);
		labelDocumento.setBounds(new Rectangle(30, 260, 155, 25));
		labelDocumento.setFont(new Font(Display.getDefault(), "Verdana", 10,
				SWT.BOLD));
		labelDocumento.setText(" Documento............:");

		textDocumento = new Text(this, SWT.BORDER);
		textDocumento.setBounds(new Rectangle(195, 260, 150, 25));
		textDocumento.setFont(new Font(Display.getDefault(), "Verdana", 10,
				SWT.BOLD));
		textDocumento.setTextLimit(20);
		textDocumento
				.addVerifyListener(new org.eclipse.swt.events.VerifyListener() {
					public void verifyText(org.eclipse.swt.events.VerifyEvent e) {
						if (e.keyCode != 0 && e.keyCode != SWT.DEL
								&& e.character != SWT.BS
								&& (e.character < 48 || e.character > 57)) {
							e.doit = false;
						}
					}
				});

		radioCPF = new Button(this, SWT.RADIO);
		radioCPF.setBounds(new Rectangle(195, 182, 150, 15));
		radioCPF
				.setFont(new Font(Display.getDefault(), "Verdana", 12, SWT.BOLD));
		radioCPF.setText("CPF");
		radioCPF
				.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
					public void widgetSelected(
							org.eclipse.swt.events.SelectionEvent e) {
						textDocumento.setText(Util.formatarCpf(textDocumento
								.getText()));

					}
				});

Alguem sabe como me livro desses Zeros??

Valeu.

6 Respostas

arec_metafora

Vixi cara, não entendi bulhufas do que você quis fazer aí.
Se você quer apenas formatar o TextField para receber campo numérico, com ‘.’ no lugar certo, utilize o MaskFormatter

new MaskFormatter("###.###.###-##").install(txtCpf);
arthurgon

Então…mas é que estou usando SWT. Essa resposta só serviria se fosse Swing. O fato é que o campo já aparece preenchido com ZEROs.

Ex: 000.000.000.00

Preciso que eles apareçam vazios para o usuário digitar o CPF.

Mas valeu pela atenção amigão.

X

tenta o setText(null)

arthurgon

Como assim? Em que momento eu deveria usar o setText(null)??
Eu estou usando ele apenas para chamar a formatação.

X

ta, pelo q entendi vc quer que qdo o usuário termine de digitar os 11 digitos do CPF ele fique formatado não é?

Caso positivo, coloca um evento para que qdo o tamanho for 11 ele execute o método…

Scoobydoo
while (cpf.length() < 12) {

cpf = " " + cpf;   <— tenta fazer assim… botando apenas um espaço em vez de um 0

}
Criado 24 de julho de 2008
Ultima resposta 9 de fev. de 2010
Respostas 6
Participantes 4