Olá! sou iniciante no Java, minha dúvida é a seguinte, no código criado abaixo quando executo, apresenta a caixa de diálogo do JOptionPane, em seguida escolho a opção numérica 07, o programa exibe a mensagem de despedida e sai, até aí tudo bem, o problema é quando coloco na opção (cancelar), daí aparece a mensagm " A Opção do menu deve ser númerico" e volta para caixa de diálogo. Como colocar a opção cancelar para sair diretamente?
public class JavaAppFull {
private ArrayList<Pessoa> lista_pessoa = new ArrayList<Pessoa>();
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
/*
* Aqui é feita a instancia JavaAppFull
* coloca o resultado da instancia em App
*/
JavaAppFull App = new JavaAppFull();
boolean run = true;
/*
* Aqui executa o loop enquanto o run = true
* assim que o run se tornar false termina o
* loop e a aplicação
*/
while (run) {
int op = App.ShowMenu();
switch (op) {
case 1:
App.AddPessoa();
break;
case 2:
App.ListarPessoa();
break;
case 3:
App.PesquisarPessoa();
break;
case 4:
App.AlterarPessoas();
break;
case 5:
break;
case 6:
App.PesquisarEnd();
break;
case 7:
App.ShowMessage("Saindo do Menu, Bye!");
run = false;
}
}
}
/**
* Aqui no ShowMenu abre o menu de opções e lista opções
* de 1 a 6, se entrar algum tipo de caracteres que
* não seje numérico, ele devolve com mensagem de erro.
* @return opcao
*/
private int ShowMenu() {
int opcao = 0;
/**
* Aqui, recebe o que o usuario digitou, e armazena
* na variavel (op), que sera usada para uma conversao
*/
String op = JOptionPane.showInputDialog(
"\n\n**************************************\n"
+ "* Menu Principal *\n"
+ "**************************************\n\n"
+ "01 - Cadastrar Pessoas\n"
+ "02 - Listar Pessoas\n"
+ "03 - Pesquisar Pessoa\n"
+ "04 - Alterar Pessoas\n"
+ "05 - Excluir Pessoa\n"
+ "06 - Pesquisar Endereço\n"
+ "07 - Sair da Aplicação\n\n");
try {
/**
* Aqui pega o que está na variavel string (op) e converte
* em inteiro e devolve para variavel inteira chamada opção
*/
opcao = Integer.parseInt(op);
} catch (java.lang.NumberFormatException ex) {
ShowMessage("A opção do Menu deve ser numérico");
}
return opcao;
}
/*
* Aqui mostra uma mensagem
*/
private void ShowMessage(String msg) {
JOptionPane.showMessageDialog (null, msg);
}
/*
* Método de adição de pessoas na lista
*/
private void AddPessoa() {
Pessoa pessoa = new Pessoa();
pessoa.setNome(JOptionPane.showInputDialog("Entre com Nome: "));
pessoa.setEnd(JOptionPane.showInputDialog("Entre com Endereço: "));
pessoa.setBairro(JOptionPane.showInputDialog("Entre com Bairro: "));
pessoa.setCidade(JOptionPane.showInputDialog("Entre com Cidade: "));
pessoa.setEstado(JOptionPane.showInputDialog("Entre com Estado: "));
pessoa.setCep(JOptionPane.showInputDialog("Entre com CEP: "));
pessoa.setTelefone(JOptionPane.showInputDialog("Entre com Telefone: "));
pessoa.setEmail(JOptionPane.showInputDialog("Entre com E-mail: "));
pessoa.setSexo(JOptionPane.showInputDialog("Entre com Sexo: "));
pessoa.setEstadoCivil(JOptionPane.showInputDialog("Entre com Estado Civil: "));
/*
* Valida se entrou com dado no objeto pessoa,
* caso não tenha dado,
* não será adicionado na lista.
*/
if (ValidaPessoa(pessoa) == true) {
lista_pessoa.add(pessoa);
}
}
/*
* Aqui ele valida se objeto(pessoa) está vazio
* e retorna verdadeiro ou falso
*/
private boolean ValidaPessoa(Pessoa pessoa) {
//se for igual true que e vazio, entra no if
if (pessoa.getNome().isEmpty() == true) {
ShowMessage("Nome, preenchimento obrigatório");
return false;
}//vai para depois do if
if (pessoa.getEnd().isEmpty()) {
ShowMessage("Endereço, preenchimento obrigatório");
return false;
}
if (pessoa.getBairro().isEmpty()) {
ShowMessage("Bairro, preenchimento obrigatório");
return false;
}
if (pessoa.getCidade().isEmpty()) {
ShowMessage("Cidade, preenchimento obrigatório");
return false;
}
if (pessoa.getEstado().isEmpty()) {
ShowMessage("Estado, preenchimento obrigatório");
return false;
}
if (pessoa.getCep().isEmpty()) {
ShowMessage("CEP, preenchimento obrigatório");
return false;
}
if (pessoa.getTelefone().isEmpty()) {
ShowMessage("Telefone, preenchimento obrigatório");
return false;
}
if (pessoa.getEmail().isEmpty()) {
ShowMessage("E-mail, preenchimento obrigatório");
return false;
}
if (pessoa.getEstadoCivil().isEmpty()) {
ShowMessage("Estado Civil, preenchimento obrigatório");
return false;//nao adiciona na lista
}
//
return true;//adiciona na lista
}
/*
* Método responsavel por pegar os objetos de
* uma lista pessoa e adicionar em uma área de
* texo e mostrar na tela.
*/
private void ListarPessoa() {
JTextArea out = new JTextArea();
/*
* Vai pegando objeto a objeto do tipo pessoa
* e coloca na variavel pessoa e após isso pega
* pessoa e adiciona na área de texto.
*/
for (Pessoa pessoa : lista_pessoa) {
//out é igual a JTextArea
out.append(pessoa.getNome() + "\n"
+ pessoa.getEnd() + "\n"
+ pessoa.getBairro() + "\n"
+ pessoa.getCidade() + "\n"
+ pessoa.getEstado() + "\n"
+ pessoa.getCep() + "\n"
+ pessoa.getTelefone() + "\n"
+ pessoa.getEmail() + "\n"
+ pessoa.getEstadoCivil() + "\n\n");//testa
}
ShowArea(out);
}
/*
* É um método que recebe uma área de texto e
* mostra no show message dialog
*/
private void ShowArea(JTextArea output) {
JOptionPane.showMessageDialog(null, output);
}
/*
* Pesquisa uma pessoa e mostra na janela
* se caso ela estiver na lista.
*/
private void PesquisarPessoa() {
String StrNome = JOptionPane.showInputDialog("Entre com Nome: ");
/*
* Não entra quando o StrNome estiver vázio
* entra após que estiver preenchido com
* algum dado.
*/
if (!StrNome.isEmpty()) {
/*
* Percorre a lista e vai comparando
* o que está no objeto e vai comparando
* com a variavel estiver na lista
* colocará o Nome e Endereço.
*/
for (Pessoa pessoa : lista_pessoa) {
if (pessoa.getNome().contains(StrNome)) {
ShowMessage(pessoa.getNome() + "\n" + pessoa.getEnd());
}
}
}
}
private void PesquisarEnd() {
String StrEnd = JOptionPane.showInputDialog("Entre com Endereço: ");
if (!StrEnd.isEmpty()) {
/*
* Percorre a lista e vai comparando
* o que está no objeto e vai comparando
* com a variavel estiver na lista
* colocará o Nome do Endereço.
*/
for (Pessoa pessoa : lista_pessoa) {
/*
* pega os dados informados
* que contém dentro do StrEnd
*/
if (pessoa.getEnd().contains(StrEnd)) {
/*
* Aqui pega os dados do endereço
* e mostra como mensagem
*/
ShowMessage(pessoa.getEnd() + "\n");
}
}
} else {
ShowMessage("Entre com a informação");
}
}
/**
* Este metodo estancia pessoa para ser adicionado
* na lista pessoa.
*/
private void AlterarPessoas() {
Pessoa pessoa = new Pessoa();
//Aqui ele pega o objeto ja alterado, so falta adicionar na lista
pessoa = getPessoa();
//Aqui adiciona na lista
lista_pessoa.add(pessoa);//proto ta feito
//entedeu o que fiz aqui? poe o comentario principal com suas palavras
}
/**
* pega os dados para alteração da entrada de usuario, pesquisa por nome, depois percorre uma lista
* comparando. Quando encontrar a ocorrencia que satisfaça a pesquisa, pedi os dados de
* alteraçao com input dialog, apos isso setar para o objeto pessoa e devolve para
* o metodo chamador. acho que ta bom assim, com o tempo vc vai melhorando, er dificil mesmo
* no inicio. agora vamos testar, vamos ver se ele ja esta no swith
* @return
*/
private Pessoa getPessoa() {
String vnome, vend, vbair, vcid, vest,
vcep, vtele, vemail, vestcivil;
/*
* Foi instanciado Pessoa
*/
Pessoa pessoa = new Pessoa();
/*
* Abre um campo para entrada de dados e retorna para
* String StrNome
*/
String StrNome = JOptionPane.showInputDialog("Entre com Nome para Alteração");//aqui espera que entre um nome para alteraçao
//poe o comentario agora
/*
* Não entra quando o StrNome estiver vázio
* entra após que estiver preenchido com
* algum dado.
*/
if (!StrNome.isEmpty()) {
/*
* Percorre a lista e vai comparando
* o que está no objeto e vai comparando
* com a variavel estiver na lista
* colocará o Nome e Endereço.
* Pega os dados da lista e coloca em pess, depois
* ele compara o q está em getNome e StrNome.
*/
for (int i = 0; i < lista_pessoa.size(); i++) {//aqui percorre a lista procurando
Pessoa pess = lista_pessoa.get(i);//aqui pega o objeto atual na possiçao do i, que começa em 0 ate o fim da lista, i vai somando
if (pess.getNome().contains(StrNome)) {//aqui compara
lista_pessoa.remove(i);
//Aqui voce ja esta pegando os novos dados
vend = JOptionPane.showInputDialog("Entre com Endereço: ", pess.getEnd());
vbair = JOptionPane.showInputDialog("Entre com Bairro: ", pess.getBairro());
vcid = JOptionPane.showInputDialog("Entre com Cidade: ", pess.getCidade());
vest = JOptionPane.showInputDialog("Entre com Estado: ", pess.getEstado());
vcep = JOptionPane.showInputDialog("Entre com CEP: ", pess.getCep());
vtele = JOptionPane.showInputDialog("Entre com Telefone: ", pess.getTelefone());
vemail = JOptionPane.showInputDialog("Entre com E-mail: ", pess.getEmail());
vestcivil = JOptionPane.showInputDialog("Entre com Estado Civil: ", pess.getEstadoCivil());
//Aqui esta setando eles para o objeto pessoa
pessoa.setNome(pess.getNome());//AI TA CERTO, TESTA AGORA
pessoa.setEnd(vend);
pessoa.setBairro(vbair);
pessoa.setCidade(vcid);
pessoa.setEstado(vest);
pessoa.setCep(vcep);
pessoa.setTelefone(vtele);
pessoa.setEmail(vemail);
pessoa.setEstadoCivil(vestcivil);
/*
* Compara getNome e StrNome e retorna
* se a condição for igual a q tiver em pess
* de getNome.
*/
return pessoa;//aqui devolve
}
}
}
/*
* Só retorna objeto com dado quando a condição
* do "if" do "for" não for satisfeita.
*/
return pessoa;
}
}
