JOptionPane - como cancelar?(RESOLVIDO)

3 respostas
R

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;
    }
}

3 Respostas

ViniGodoy

Quando o botão de cancelar é pressionado, o JOptionPane retorna null para a variáve op.
Basta testar por essa condição.

Por exemplo, vc poderia adicionar a linha 82 o seguinte código:

opcao = op == null ? 7 : Integer.parseInt(op);
R

[quote=ViniGodoy]Quando o botão de cancelar é pressionado, o JOptionPane retorna null para a variáve op.
Basta testar por essa condição.

Por exemplo, vc poderia adicionar a linha 82 o seguinte código:

opcao = op == null ? 7 : Integer.parseInt(op);

Sua ajuda resolveu o problema, muito obrigado!

d34d_d3v1l

seria legal se vc colocasse
[resolvido] no titulo do tópico para evitar que,
pessoas como eu neste momento, visite o post de forma desnecessária. :slight_smile:

Criado 26 de junho de 2012
Ultima resposta 28 de jun. de 2012
Respostas 3
Participantes 3