style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Ayuda con elementos del JComboBox()

Hola!

Tengo un pequeñito problema con un combo que lleno a través de un arreglo bidimensional de Objetos que trae una consulta de postgresql

La cosa es que en mi consulta traigo por ejemplo nombre de vialidades de un municipio pero algunos nombres se repiten y cuando selecciono el item y quiero saber el índice que tiene en el combo, los nombres que son iguales tienen el mismo índice, sin importar que uno este abajo del otro.

Por ejemplo, si mi combo tiene una lista con 5 nombres, de los cuales los últimos 3 son los mismos, me traerá el mismo índice para los 3

CESAR índice 0
CLAUDIA índice 1
KAREN índice 2
KAREN índice 2
KAREN índice 2

Cabe mencionar que cada nombre tiene un ID diferente en la DB que es lo que los hace diferentes por ejemplo

ID NOMBRE
1 CESAR
2 CLAUDIA
3 KAREN
4 KAREN
5 KAREN

Entonces yo lo que necesito es que al seleccionar el último elemento del combo me retorne el indice 5, no el 2 como si fuera el 3er elemento en la lista.

Alguna sugerencia?? Aquí les dejo un cacho de mi código que se encarga del combo, es una simple pantalla que hice de prueba.
La función donde esta al ActionListener se llama eventos(), ahí es donde saco el índice cuando se selecciona un item del combo;

/**
 *
 * @author cesar segura granados
 *
 */

public class combosPruebas extends JFrame {

        /**
         *
         */

        private static final long serialVersionUID = 1L;
       
        private JComboBox combo;
        private Object [][] lista;
        private JPanel basePanel;
        private JTextField txt;

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                new combosPruebas();
        }
       
        public combosPruebas(){
                inicializar();
        }
       
        public void inicializar(){
                this.setVisible(true);
                this.setSize(500,150);
                this.setLocationRelativeTo(null);
               
                combo = new JComboBox();
                txt = new JTextField("Indice");
                consultas();
                eventos();
               
                this.add(getPanel());
        }
       
        public void consultas (){
                Coneccion coneccion = new Coneccion();
                sql sqlsql = new sql(coneccion.getConnection());
                lista = sqlsql.consulta("select catcalle_nombre from cat_calle where edo_cve=32 and regcat_cve=17 and mun_cve=50");
               
                for(int i=0; i<lista.length; i++){
                        combo.addItem(lista[i][0].toString());
                }
                coneccion.closeConnection();
        }
       
        public JPanel getPanel(){
                basePanel = new JPanel();
                GroupLayout baseLayout = new GroupLayout(basePanel);
                basePanel.setLayout(baseLayout);
                baseLayout.setAutoCreateContainerGaps(true);
                baseLayout.setAutoCreateGaps(true);
                baseLayout.setHorizontalGroup(baseLayout.createSequentialGroup()
                                .addComponent(txt, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE)
                                .addGap(30,30,30)
                                .addComponent(combo, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE));
                baseLayout.setVerticalGroup(baseLayout.createParallelGroup(Alignment.LEADING)
                                .addComponent(txt, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                               
                                .addGroup(baseLayout.createParallelGroup(Alignment.LEADING)
                                                .addComponent(combo, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)));
               
                return basePanel;
        }
       
        public void eventos(){
                combo.addActionListener(new ActionListener() {
                       
                        @Override
                        public void actionPerformed(ActionEvent e) {
                                txt.setText(String.valueOf(combo.getSelectedIndex()));
                        }
                });
        }

}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Ahorita lo que ando haciendo

Ahorita lo que ando haciendo es que hice una clase donde le paso un índice a cada elemento pero el problema es que se llena el combo con el ultimo elemento jaja y estoy estudiando las colecciones para ver como puedo distinguir los objetos aunque se llamen igual.
ALgo asi como HashCode

Solución

Listo ya lo solucionamos.

LO que se hizo fue crear una clase donde generamos los beans, en este caso solo necesitamos los getters.
y el constructor pedirá un parámetro entero y un string, los cuales serán el ID y el valor que se agregaran al combo respectivamente. La clase principal quedo practicamente igual, sólo que al llenar el combo inicializamos a la clase que creamos y le pasamos los parametros.

for(int i=0; i<lista.length; i++){
//                      combo.addItem(lista[i][0].toString());
                        combo.addItem(new IndicesCombos(i, lista[i][0].toString()));
                }

y la clase quedo así

/**
 *
 * @author cesar segura granados
 *
 */

public class IndicesCombos {
       
        private String valor;
        private int ID;
       
        public IndicesCombos(int ID, String valor){
                this.valor = valor;
                this.ID = ID;
        }
       
       
        public String getValor() {
                return valor;
        }
       
        public int getID() {
                return ID;
        }
       
        public String toString(){
                return valor;
        }
}

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">