Ajuda com JOptionPane;

Pessoal novamente peço uma ajuda com o código que estou desenvolvendo para um exercício da Faculdade a questão pede o seguinte:

  1. Crie um mini sistema de cadastramento de clientes, com os seguintes requisitos:
    ? Deve armazenar os dados dos clientes através de um registro contendo o nome, endereço,
    cpf do cliente;
    ? Deve conter um estrutura para armazenar vários clientes (um vetor de clientes) declarada
    globalmente;
    ? Deve conter um módulo de:
    Cadastramento de cliente;
    Visualização de um cliente através do código. O código é o índice do vetor clientes;
    Visualizar os dados de todos os clientes;
    Permitir que o usuário possa escolher um das ações desempenhadas por estes módulos;

Já consegui fazer uma parte porém estou tendo dificuldade em adequar o código para utilizar o JOptionPane no lugar do Scanner, utilizando o Scanner consigo acessar o que quero porém ainda da um erro na visualização dos clientes mas acho que consigo desenrrolar isso, meu problema está em como chamar uma opção utilizada no menu e passar para dentro do main.

Segue o código:

[code]import javax.swing.JOptionPane;
import java.util.Scanner;
public class registro
{
static Ficha[ ]armazena;
static int i;
static int quantidade;

static void menu()// Passar a opção Digitada Aqui la para o Void
{ int n;
n = Integer.parseInt(JOptionPane.showInputDialog(null, “Escolha uma opção:\n1: Cadastro de clientes.”+
“\n2: Consultar dados de um cliente.\n3: Visualizar dados de todos os clientes.”));
}

static void armazena(){
Ficha a = new Ficha();
a.nome = JOptionPane.showInputDialog(“Digite o nome do cliente:”);
a.endereco = JOptionPane.showInputDialog(“Digite o endereço do cliente:”);
a.cpf = JOptionPane.showInputDialog(“Digite o cpf do cliente:”);

if (i<armazena.length){
armazena[i] = a;
JOptionPane.showMessageDialog(null, “Cliente " + i + " cadastrado com sucesso.”);
i=i+1;
}
}
static void visualiza(){
Scanner s = new Scanner(System.in);
System.out.println(“Digite o código do cliente.”);
int b = s.nextInt();
if (b<quantidade){
System.out.println("Cliente " + b + “:”);
System.out.println("Nome: " + armazena[b].nome);
System.out.println("Endereço: " + armazena[b].endereco);
System.out.println("CPF: " + armazena[b].cpf);
}else{
System.out.println(“Não há clientes cadastrados com este código.”);
}
}
static void visaogeral(){
for(int z = 0; z<quantidade; z++){
System.out.println("Cliente " + z + “:”);

System.out.println("Nome: " + armazena[z].nome);
System.out.println("Endereço: " + armazena[z].endereco);
System.out.println("CPF: " + armazena[z].cpf);
System.out.println();

}
}
public static void main(String[ ] args)
{
armazena = new Ficha[1000];
i=0;
quantidade=0;
menu();// Utilizar a opção aqui.
int n = Integer.parseInt(JOptionPane.showInputDialog(null));
while (n>0){
switch (n){
case 1:
armazena();

quantidade = quantidade+1;
break;
case 2:
visualiza();
break;
case 3:
visaogeral();
break;
default:
}
menu();
n = Integer.parseInt(JOptionPane.showInputDialog(null));

}

}

}[/code]

Estou tentando passar a opção digitada no menu para o if porém não sei como usando o JOptionPane, se puderem me dar uma luz agradeço.

Abraços

Obs. O Código no Scanner está quase ok, a intenção é passar para o JOptionPane.

Fala brow,

Se eu entendi, voce nao ta conseguindo pegar a opcao escolhida pelo
usuario no menu, certo?

Bom, se for isso, voce tem 2 formas de resolver:

1 - Utilizando um atributo na classe.

 //...
 private int opcao = 0;
 //...
 
 // Ae, dentro do metodo menu, vc joga o valor que leu para este atributo:
 static void menu(){
 //...
 this.opcao = n;
 //...

2 - Utilizar um retorno no metodo menu(), sendo esta a mais adequada na minha opiniao:

// mude a declaracao do metodo para
static int menu(){
//...
}

// E na hora de executar...
int opcao = menu();

E, mais uma opiniao, nao deixe de qualificar seus atributos/metodos
com public, private ou protected.

Abraco!

Bom da, tente analizar o código, qualquer dvida é só pedir!

[code]public class DadosPessoas {
private String nome;
private String endereco;
private String cpf;

public String getNome() {
	return nome;
}

public void setNome(String nome)throws Exception {
	if(nome.trim().length() ==0)throw new Exception("Você deve informar um nome");
	this.nome = nome;
}

public String getEndereco() {
	return endereco;
}

public void setEndereco(String endereco)throws Exception  {
	if(endereco.trim().length() == 0)throw new Exception("Você deve informar um endereço");
	this.endereco = endereco;
}

public String getCpf() {
	return cpf;
}

public void setCpf(String cpf)throws Exception  {
	if(cpf.trim().length() == 0)throw new Exception("Você deve informar um cpf");
	if(cpf.length() != 11)throw new Exception("Informe um cpf válido.\nSomente números");
	for(byte i = 0; i < cpf.length(); i++){
		if(Character.isLetter(cpf.charAt(i)))
			throw new Exception("O cpf não pode conter letras");
	}
	this.cpf = cpf;
}

public String toString(){
	return "\nNome: " + nome + "\nEndereço: " + endereco + "\nCPF: " + cpf;
}

}[/code]

Classe com o método main

[code]import static javax.swing.JOptionPane.*;

public class Cadastro {

private static DadosPessoas registros[] = new DadosPessoas[1000];
private static int contf = 1;

public static void main(String[] args) {
	int op = menu();
	switch (op) {
	case -1:
		System.exit(0);
	case 0:
		cadastrar();
		break;
	case 1:
		consultar();
		break;
	case 2:
		consultarTodos();
		break;
	}
}

private static void consultarTodos() {
	String aux = "";
	int cont = 1;
	boolean bl = false;
	for (DadosPessoas d : registros) {
		if (d == null)
			break;
		bl = true;
		aux += "\n\nCódigo: " + cont + d;
		cont++;
	}
	if (bl == true)
		showMessageDialog(null, aux, "Lista de pessoas cadastradas", INFORMATION_MESSAGE);
	else
		showMessageDialog(null, "Nenhuma pessoa cadastrada");
	main(null);
}

private static void consultar() {
	if (registros == null)
		showMessageDialog(null, "Nenhuma pessoa cadastrada", "Aviso", 2);
	else
		while (true) {
			String aux = showInputDialog("Informe o código da pessoa");
			if (aux == null)
				break;
			int op = Integer.parseInt(aux);
			if(op <= 0){
				showMessageDialog(null, "Código inválido", "Erro", ERROR_MESSAGE);
				continue;
			}
			if (registros[op-1] == null)
				showMessageDialog(null,
						"Nenhuma pessoa cadastrada com esse código",
						"Alerta", ERROR_MESSAGE);
			else {
				DadosPessoas d = registros[op-1];
				showMessageDialog(null, "Código: " + op + d, "Consulta por código", INFORMATION_MESSAGE);
			}
		}
	main(null);
}

private static void cadastrar() {
	for (; contf <= registros.length; contf++) {

		DadosPessoas d = new DadosPessoas();

		String aux = "";
		while (true) {
			aux = showInputDialog("Informe o nome da pessoa");
			if (aux == null)
				break;
			try {
				d.setNome(aux);
				break;
			} catch (Exception ex) {
				showMessageDialog(null, ex.getMessage(), "Erro",
						ERROR_MESSAGE);
			}
		}
		if (aux == null)
			break;

		while (true) {
			aux = "";
			aux = showInputDialog("Informe o endereço da pessoa");
			if (aux == null)
				break;
			try {
				d.setEndereco(aux);
				break;
			} catch (Exception ex) {
				showMessageDialog(null, ex.getMessage(), "Erro",
						ERROR_MESSAGE);
			}
		}
		if (aux == null) {
			showMessageDialog(null, "Cadastro não completado", "Alerta", 2);
			break;
		}

		while (true) {
			aux = "";
			aux = showInputDialog("Informe o cpf da pessoa");
			if (aux == null)
				break;
			try {
				d.setCpf(aux);
				break;
			} catch (Exception ex) {
				showMessageDialog(null, ex.getMessage(), "Erro",
						ERROR_MESSAGE);
			}
		}
		if (aux == null) {
			showMessageDialog(null, "Cadastro não completado", "Alerta", 2);
			break;
		}

		registros[contf - 1] = d;
		showMessageDialog(null,
				"Cadastro da pessoa " + contf +  " Realizado com sucesso!!!", "Aviso", 2);
	}
	main(null);
}

private static int menu() {
	return showOptionDialog(null, "O que deseja fazer", "Selecione", 0,
			QUESTION_MESSAGE, null, new String[] { "Cadastrar pessoa",
					"Consultar pessoa", "Ver todos os cadastros" },
			"Cadastrar pessoa");
}

}[/code]

Neste exemplo importei o método estático do JOptionPane, para evitar toda a vez escrever JOptionPane…, para o menu, utilizei o showOptionDialog que faz parte do JOptionPane, na classe DadosPessoas, deixei todos os atributos privados, pois como já deve saber, cada classe é responçavel por protegem o que é seu… e para acessar estes atributos foi utilizado métodos estaticos que servem para armazenar e ler os dados dos atributos, o método to String doi utilizado para montar a mensagem de consulta…, Qualquer dúvida é só pedir!!!

Opá, desculpem a demora a responder.
Conseguir terminar graças a vocês.
Obrigado.

Abraços


Alessandro09

Acabei de testar aqui no eclipse e ficou show o programa.
era exatamente isso que estava tentando fazer, agora vou analisar o código com calma para aprender pois isso é o que vale.
muito obrigado.