Problema con combobox e items duplicados

publicado por: Anonymous

tengo un combobox que lo relleno con datos desde mysql, el problema que tengo actualmente, es que el combobox me duplica los valores, ejemplo,si le agrego 5 items, me mostrara los 5 y otros 5 que son copias de los primeros, les dejo el código y una foto de ejemplo:

public void docenteAlumno(String seccion,JComboBox cb,JComboBox cb2,DocenteMenu estado){
         ArrayList <String> usuarios= new ArrayList();
         Connection con= new AbrirBasedeDatos().conectar();
         int yy=cb.getItemCount();
         String xx=String.valueOf(yy);
         if(xx!=null && !xx.isEmpty()){
            cb.removeAll();
         }
         usuarios.clear();
         cb.addItem("Seleccione Alumno");


          try {
           if(con!=null){
             Statement st = con.createStatement();
             String query ="select * from inasistencia where seccion = '"+seccion+"'and leida=false and justificado='si'";

             ResultSet rs = st.executeQuery(query);

             while(rs.next()){
                 usuarios.add(rs.getString("user"));


             }
             removeDuplicates(usuarios);



             for(int i=0;i<usuarios.size();i++){
                 String query2="select * from usuario where user='"+usuarios.get(i)+"'";

                 ResultSet rss=st.executeQuery(query2);
                 while(rss.next()){

                     cb.addItem(rss.getString("nombre"));
                 }
             }
            cb2.setEnabled(true);
           }else{
               JOptionPane.showMessageDialog(estado,"Asegurate de estar conectado a internet");
           }
          }catch (SQLException sqle){
              System.out.println("el error fue: "+sqle.getMessage());
              JOptionPane.showMessageDialog(estado,"Ocurrio un error, vuelve a intentarlo más tarde");
          }
       new AbrirBasedeDatos().cerrarConexion();





    }

    private void removeDuplicates(ArrayList<String> list){
    int index = 0;
    int count = 0;

    while (index < list.size() - 1) {
        String item = list.get(index);
       List<String> tail = list.subList(index + 1, list.size());
        while (tail.equals(item)) {
            tail.remove(item);
            count++;
        }
        index++;
    }

       }

asi es como se ve actualmente:
introducir la descripción de la imagen aquí

espero que me puedan ayudar

solución

A petición de @gbianchi, al parecer el problema es generado por el mismo itemStateChanged, ya que este evento es llamado dos veces de forma normal.

La primera vez cuando el item seleccionado deja de estarlo (es decir,
su estado cambia a deseleccionado) y la segunda vez cuando el nuevo
item es seleccionado (pasa de estar deseleccionado a
seleccionado).

Como mencioné en el comentario:

El ItemStateChanged comienza a funcionar
incorrectamente
cuando dejas un item y colocas otro.

No utilices un ItemStateChanged,
en vez de este, utiliza un ActionListener el cuál es bueno para
manipular eventos de un ComboBox.

Puedes utilizar el ItemStateListener
si por aparte necesitas comprobar cuando el item está seleccionado y
luego deja de estarlo.

Al cambiar el estado del item, esto provoca
una rellamada a itemStateChanged

Entonces, es mejor utilizar el ActionPerformed del ActionListener del JComboBox.

Si por fuerza debes utilizar el ItemStateChanged entonces, comprueba con un if si el estado del item es "seleccionado", así obtienes el item y no pasará dos veces, el estado del item lo obtienes con e.getStateChanged();

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *