[Dúvida] CPF, aceitar apenas números

Olá pessoal, to fazendo um programinha em Java, sem interface gráfica, eu quero criar um método que ao pedir pro usuário informar o CPF, ele iria aceitar apenas números, por exemplo: O cara ia digitar uma letra, e não ia preencher o campo, o campo será preenchido apenas se ele digitar números…
Estava tentando usar aquela classe KeyPressed, mas não consigo, ainda sou muito leigo em Java e uma ajuda seria muito bem vinda, obrigado.

// Se o usuário digitar letra
// Não aceite
// Senão
// aceite

cria um campo JFormatedTextField ao invés do TextField

JFormatedTextField jftf = new JFormatedTextField("###.###.###-##")

[quote=mayckonx]Olá pessoal, to fazendo um programinha em Java, sem interface gráfica, eu quero criar um método que ao pedir pro usuário informar o CPF, ele iria aceitar apenas números, por exemplo: O cara ia digitar uma letra, e não ia preencher o campo, o campo será preenchido apenas se ele digitar números…
Estava tentando usar aquela classe KeyPressed, mas não consigo, ainda sou muito leigo em Java e uma ajuda seria muito bem vinda, obrigado.

// Se o usuário digitar letra
// Não aceite
// Senão
// aceite
[/quote]

Bom dependendo da IDE que vc esteja usando, eu uso o NetBeans 6.9.1 e eu faço da seguinte forma:

1º vc sem te criar as MaskFormatter!

public class CasdastroEmpreiteira extends javax.swing.JFrame {
    MaskFormatter Formato_cpf

2º No JTextField que esta seu CPF clique com o botão direito e vá em Proriedades
em seguida
em CODE ou CODIGO
e Procure por Pré-Codigo

try
{
    Formato_cpf = new MaskFormatter("###.###.###-##");
    

}
catch(Exception erro)
{
    JOptionPane.showMessageDialog(null, "Não foi possivel setar");
}

Em seguida vá em codigo personalizado

e

escreva:
new JFormattedTextField (Formato_cpf);

Depois e so rodar e ver se deu certo

Galera, não entendi muito bem. Olhem só, eu estou usando o Eclipse, e estamos fazendo tudo usando System.out.println e Scanner pra ler, eu to lendo uma lista de pessoas e quero quemeu CPF não aceite letras. Meu CPF não está em JTextField.


public class Pessoa {
    private Pessoa proximo;
    private String nome;
    private String endereço;
    private String CPF;
    public String getEndereço() {
		return endereço;
	}
	public void setEndereço(String endereço) {
		this.endereço = endereço;
	}
	public String getCPF() {
		return CPF;
	}
	public boolean setCPF(String cPF) {
		this.CPF = cPF;
		if((this.CPF!=null)&&(this.CPF.length()==11)){
			return true;
		}
		else{
			return false;
		}
	}
	public Pessoa(){
    	this.proximo = null;
    	this.nome = "";
    	this.CPF = "";
    }
	public Pessoa getProximo() {
		return proximo;
	}
	public void setProximo(Pessoa proximo) {
		this.proximo = proximo;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public String toString() {
		return this.getNome();
	}
}
import java.io.*;

public class Lista {
	File arquivo = new File("/Users/MaYcKoN/Desktop/Lista.csv");
	private Pessoa primeiro;

	public Lista() {
		this.primeiro = null;
	}

	public void inserir(Pessoa pessoa) {
		if (this.primeiro == null)
			this.primeiro = pessoa;
		else {
			Pessoa iterador;
			for (iterador = this.primeiro; iterador.getProximo() != null; iterador = iterador
					.getProximo());
			iterador.setProximo(pessoa);
		}
	}

	public void remover() {
		if (this.primeiro != null) {
			this.primeiro = this.primeiro.getProximo();
		}
	}

	public Pessoa getPrimeiro() {
		return primeiro;
	}

	public void setPrimeiro(Pessoa primeiro) {
		this.primeiro = primeiro;
	}

	public void removerNoFinal() {
		Pessoa iterador;
		if (this.primeiro != null) {
			if (this.primeiro.getProximo() == null) {
				this.primeiro = null;
				return;
			}
		}
		iterador = this.primeiro;
		for (; iterador.getProximo() != null; iterador = iterador.getProximo()) {
			if (iterador.getProximo().getProximo() == null) {
				iterador.setProximo(null);
				break;
			}
		}
	}
	
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Principal  {
	public static void main(String args[]) {
		File arquivo = new File("/Users/MaYcKoN/Desktop/Lista.csv");
		Scanner input = new Scanner(System.in);
		Lista StudentsGold = new Lista();
		Pessoa iterador;
		int op;
		do {

			System.out.println("Digite 1 para inserir uma pessoa na Lista");
			System.out
					.println("Digite 2 para remover uma pessoa no inicio da Lista");
			System.out
					.println("Digite 3  para remover uma pessoa no final da Lista");
			System.out.println("Digite 4 para mostrar a Lista");
			System.out.println("Digite 5 para gravar a Lista");
			System.out.println("Digite 6 para recuperar a Lista");
			System.out.println("Digite 0 para sair");
			op = input.nextInt();
			input.useDelimiter("\n");
			switch (op) {
			case 1:
				System.out.println("Digite o nome da Pessoa");
				iterador = new Pessoa();
				iterador.setNome(input.next());
				System.out.println("Digite o endereço da Pessoa");
				iterador.setEndereço(input.next());
				System.out.println("Digite o CPF, apenas números.");
				iterador.setCPF(input.next());
	            StudentsGold.inserir(iterador);
				break;

			case 2:
				StudentsGold.remover();
				break;

			case 3:
				StudentsGold.removerNoFinal();
				break;

			case 4:
				if (StudentsGold.getPrimeiro() != null) {
					for (iterador = StudentsGold.getPrimeiro(); iterador
							.getProximo() != null; iterador = iterador
							.getProximo()){
						System.out.println("Nome: "+iterador.getNome()+"\nEndereço: "+iterador.getEndereço()+"\nCPF: "+iterador.getCPF());
						System.out.println();
					}
					System.out.println("Nome: "+iterador.getNome()+"\nEndereço: "+iterador.getEndereço()+"\nCPF: "+iterador.getCPF());
					System.out.println();
				} else
					System.out.println("Lista Vazia");
				break;
			case 5:
				try {
					FileWriter escrever = new FileWriter(arquivo);
					BufferedWriter buffer = new BufferedWriter(escrever);
					if (StudentsGold.getPrimeiro() != null) {
						buffer.write(StudentsGold.getPrimeiro().getNome()+" ");
						buffer.write(StudentsGold.getPrimeiro().getEndereço()+" ");
						buffer.write(StudentsGold.getPrimeiro().getCPF()+ " ");
						buffer.newLine();
						for (iterador = StudentsGold.getPrimeiro(); iterador.getProximo() != null; iterador = iterador
								.getProximo()) {
							buffer.write(iterador.getProximo().getNome());
							buffer.write(StudentsGold.getPrimeiro().getEndereço()+" ");
							buffer.write(StudentsGold.getPrimeiro().getCPF()+ " ");
							buffer.newLine();
						}
						buffer.flush();
					}

				} catch (IOException e) {
					e.printStackTrace();
				}
				break;
			case 6:
				try {
					FileReader ler = new FileReader(arquivo);
					BufferedReader buffer = new BufferedReader(ler);
					String str=null;
					while ((str = buffer.readLine())!= null) {
						Pessoa p = new Pessoa();
						p.setNome(str); // por enquanto to recuperando só o nome. 
						StudentsGold.inserir(p);
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
				break;
			}
		} while (op != 0);
	}
}

Fiz uma pequena verificação ali na Classe pessoa pra saber se o CPF tem 11 digitos ou não, mas nem cheguei a tratar bem isso. O que eu quero é que quando o cara for digitar uma letra, o programa não aceite, ou seja, ele vai digitar e não vai aparecer NADA, ele vai digitar apenas números e ele vai ter que digitar 11 números, se ele digitar menos, informo uma mensagem pra ele inserir 11 numeros.

kra o system.in só recebe a palavra completa… ele nao verifica letra por letra no momento da digitação

[quote=redr4gon]kra o system.in só recebe a palavra completa… ele nao verifica letra por letra no momento da digitação
[/quote]

Me desculpe, é que sou iniciante em Java, eu não entendi muito bem. Eu vou criar um objeto do tipo JFormatedTextField e vou usar esse objeto pra ler como se fosse um scanner? :oops:
Eu só quero que o usuário tenha a opção de digitar apenas números e que ele seja obrigado a digitar os 11 números :frowning:

cara pelo que entendi isso é uma validação certo…

se vc colocou a mascara no campo , não vai aceitar letra…

isEmpty()

Como você é iniciante, assim como eu, deve estar achando grego o que eles estão falando… Então, pelo o que eu entendi você quer validar se o que for escrito em CPF seja apenas números, certo?

Porque você não cria um algoritmo que compare posição por posição de uma String se é letra ou numero? É só você ir na da posição do ‘0’ até o ‘9’ da tabela UNICODE, se nao for será uma letra ou caractere… Depois você passa de STRING para INTEGER. entendeu?

Segue um código para fixar idéia:

String cpf1;
int cpf2;
cpf = scanner.next(); //Aqui eu digito os números...
for(i=0;i < cpf1.lenght;i++) {
    if(cpf1[i]!='1'||cpf1[i]!='2'||cpf1[i]!='3'||(...)||cpf1[i]!='9') {
        System.out.println("CPF inválido!");
        break;
    }
}
if(i==cpf.lenght) //Quando 'i' sai do for ele terá mesmo valor que cpf.lenght, se tiver é porque checou todos os numeros e nao entrou na condição 'if', ou seja, É VÁLIDO!
    cpf2 = Integer.parseInteger(cpf1); //Se for válido ele transforma de 'String' para 'Integer'.

Espero ter ajudado…

não tem como…

em C existe o getche(), que pega uma tecla junto com o Enter

em java acho que não existe

o cpf no seu programa teria que funcionar da seguinte forma em java na linha de comando

digite um numero: [3]
[Enter]
Digite um numero:[3][7]
[Enter]

sendo que você quer dessa maneira:

digite um numero:[3][7][3][…], porém em java na linha de comando não tem como, apenas no modo gráfico…