Evento jComboBox duplicado!

4 respostas
S

Usando o netbans, criei um ActionPerformed para um jComboBox EDITÁVEL.
A ideia seria ao clicar em algum item do jComboBox jcbNome, seria verificado se o item existe na lista do jComboBox(logicamente ele existe), mas também quando o usuário digitar o nome ao invés de buscar na lista, também seria verificado se o nome digitado existe (este é o verdadeiro objetivo).

O problema é que quando o o usuario digita um nome que não existe na lista e o jComboBox perde o focu, o método " jcbNomeActionPerformed" é chamado sempre duas vezes (imprimindo"—nao" duas vezes) ao invés de apenas uma vez.

private void jcbNomeActionPerformed(java.awt.event.ActionEvent evt) {
        if (!this.jcbNome.getSelectedItem().toString().isEmpty()) {
            Cliente c= cExistente();
            if (c != null) {
                System.out.print("---encontrou");
            } else {
                System.out.print("---nao");   
            }
        }
    }

    private Cliente cExistente(){
        Cliente cEncontrado = null;
        for (Iterator<Cliente> it = this.listaCliente.iterator(); it.hasNext();){
            Cliente c = it.next();
            if(c.getNome().equals(this.jcbNome.getSelectedItem().toString())){
                 return c ;
            }
        }
        return null;
    }

4 Respostas

al.barbosa

Este método é chamado duas vezes porque nesse caso ocorrem dois eventos: comboBoxChanged e comboBoxEdited. Para chamar o método somente uma vez, você pode colocar um if no início testando se evt.getActionCommand() é igual a comboBoxChanged. Desta forma:

private void jcbNomeActionPerformed(java.awt.event.ActionEvent evt) { if(evt.getActionCommand().equals("comboBoxChanged")){ if (!this.jcbNome.getSelectedItem().toString().isEmpty()) { Cliente c= cExistente(); if (c != null) { System.out.print("---encontrou"); } else { System.out.print("---nao"); } } } }

ViniGodoy

Para comparar Strings, use o método equals no lugar de ==:

al.barbosa

Perfeito, obrigado. Tinha esquecido dessa questão.
Se usar == com String são comparadas as referências dos objetos. Para comparar o conteúdo tem que usar equals().

Corrigi o código na resposta anterior.

S

Obrigado al.barbosa, resolveu o meu problema :smiley:

Criado 21 de maio de 2012
Ultima resposta 23 de mai. de 2012
Respostas 4
Participantes 3