Foros del Web » Programación para mayores de 30 ;) » Java »

Obtener "codigo" de un JCombobox

Estas en el tema de Obtener "codigo" de un JCombobox en el foro de Java en Foros del Web. De una base de datos obtengo un listado que lo inserto en un JCombobox, y me gustaria que al seleccionar un elemento obtener el codigo ...
  #1 (permalink)  
Antiguo 18/03/2008, 11:29
Avatar de Snd234  
Fecha de Ingreso: mayo-2007
Ubicación: Frente al PC
Mensajes: 413
Antigüedad: 16 años, 11 meses
Puntos: 2
Obtener "codigo" de un JCombobox

De una base de datos obtengo un listado que lo inserto en un JCombobox, y me gustaria que al seleccionar un elemento obtener el codigo de este.

La primera solucion que tenia era obtener el nombre del elemento seleccionado y realizar la consulta en la base de datos para obtener su codigo. Pero en caso de tener varios Combobox serian muchas las consultas a realizar para obtener un solo dato.

La segunda solucion, era crear 2 jCombobox, la segunda estaria oculta y guardaria los codigos. Cuando realizo el ciclo para llenar el combobox principal, tambien lleno el secundario con las claves principales. Entonces, cuando seleccione un elemento del Combobox principal, obtengo el codigo del segundo Combobox, de acuerdo al indice seleccionado del primero.

Y como tercera solucion, es similar a la anterior. Usando un arreglo de numeros, guardo los codigos y en el Combobox, al seleccionar un elemento obtengo el indice y lo busco en el arreglo, obteniendo asi la clave principal.

Existe alguna otra solucion??? cual seria mejor implementar?
__________________
KIBIT.cl
  #2 (permalink)  
Antiguo 18/03/2008, 19:07
Avatar de djagu_26  
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 518
Antigüedad: 16 años, 3 meses
Puntos: 6
Re: Obtener "codigo" de un JCombobox

hola supongo que la lista que traes de la bd es un array de objetos el cual tiene un atributo que es el codig sino me equivoco no? y lo que agregas en el combo son objetos? en ese caso no necesitas tanto malabarismo solo haciendo esta linea de codigo
Objeto objetoSeleccionado=(Objeto)comboBox.getSelectedIte m();
objetoSeleccionado.getCodigo();
se supone que los objetos enteros estan cargados en el combo en ram y no es necesario realizar una busqueda en la bd de nuevo
saludos
__________________
"La magia no existe, la programacion si"

A/P Agustin Sivoplas
[email protected]
  #3 (permalink)  
Antiguo 19/03/2008, 13:50
Avatar de Snd234  
Fecha de Ingreso: mayo-2007
Ubicación: Frente al PC
Mensajes: 413
Antigüedad: 16 años, 11 meses
Puntos: 2
Re: Obtener "codigo" de un JCombobox

--- edit
Haber, yo de mi base de datos obtengo por ejemplo 2 columnas con 10 filas. Las columnas son id_ciudad y nombre_ciudad. Y las filas obviamente son los datos.

Entonces, cuando manipulo el resultado de la consulta, muestro el nombre de la ciudad (campo nombre_ciudad) en la combobox. Entonces, si despues selecciono X ciudad, me gustaria saber su codigo en la base de datos, pero sin necesidad de realizar la consulta en la base de datos para obtenerlo, entonces las soluciones que habia propuesto era meter los codigos en otro combobox, y de esta forma al seleccionar un elemento del combobox principal, el codigo estaria en el mismo indice del segundo combobox.

Entonces queria saber si esa solucion es factible (de hecho funciona, pero quizas exista otra forma mas optima).
__________________
KIBIT.cl

Última edición por Snd234; 19/03/2008 a las 18:19
  #4 (permalink)  
Antiguo 23/03/2008, 23:30
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Re: Obtener "codigo" de un JCombobox

Extiendo un poco la información previamente escrita por djagu_26.

Pero... si lo que quieres es hacer esto:
public String toString(){
return dato + " - " + dato2;
}

entonces omite este post, de otra forma
vamos a hacer un poco de malabarismo ¿?
para hacerlo de manera adecuada para programas
de bases de datos.

Básicamente, el ComboBox funciona a través de objetos.
Si le agregas un objeto a la lista, y después lo recuperas, obtienes el objeto inicial.
Por ejemplo:

Código:
public class MyObjetoParaCombo {
  public Integer codigo;
  public String nombre;
  public MyObjetoParaCombo(Integer codigo, String nombre) {
    this.codigo = codigo;
    this.nombre = nombre;
  }
  public String toString() {
    return this.nombre;
  }
  etc...
}
Si creas un objeto y lo agregas a la lista, por ejemplo:

MyComboBox ...etc ... add(new MyObjetoParaCombo(1, "Test"));

Va a desplegar en la lista "Test", por el "@Overrides" de "toString()", y
cuando recuperes el objeto, te devuelve el objeto inicial, por ejemplo:

MyObjetoParaCombo s = (MyObjetoParaCombo) comboBox.getSelectedItem();
s.codigo;

Te devuelve "1" para el "s.codigo" cuando tengamos seleccionado "Test".

Podrías preguntarte sobre el desempeño en memoria, etc., y normalmente un ComboBox no debe tener mas de 30 o 40 opciones, por lo tanto no hay problema de crear esa cantidad de objetos. (Poner a un usuario a seleccionar entre más de 200 o 300 opciones a través de un solo ComboBox creo no sería adecuado -aunque en algunos programas no que quedaba otra opción-). Con java 1.0 en un computador Intel 286, con 8 Mb de RAM, hace muuuucho tiempo, lo máximo que pude hacer funcionar adecuadamente fueron 4,000 objetos con 2,000 threads, casi concurrentes, aproximadamente 800 usuarios conectados, realmente eran 800 conexiones de otra PC. Fué una pruebita :) para un servidor FPT en Java.

Saludos,

ps.:

Anteriormente ya existía un post donde escribí un ejemplo, que lo extrae directamente de un ResultSet, de una base de datos. Además con funciones muy útiles para usarlo conjuntamente con otro ResultSet donde estés actualizando información. (Por ejemplo: Para editar, cuando traes un registro de la base de datos de la tabla primaria, normalmente quieres que la opción seleccionada en la lista, sea automáticamente la misma que está almacenada, pero el ComboBox te despliega "Test" y tu necesitas seleccionarla con el número 1 que es la operación inversa de tu pregunta; y resulta muy útil cuando estas usando bases de datos).
(Un detalle... el último post que escribí allí, en ese otro post... fue irónico.. pero incomprensible para algunos).

http://www.forosdelweb.com/f45/relle...bo-box-563305/

El ejemplo es complicado en el otro post, por que no es un "Visa - 1", es mucho más complejo, por que es mucho más útil cuando haces programas que manejan bases de datos extensivamente. Por mala suerte para mí, creí que era un tiempo perdido, puesto que la estudiante que hizo la pregunta no tenía la más mínima intención de hacer un programa de base de datos, sino un pequeño ejercicio para su escuela.

Espero que tu aproveches de mejor forma ese código que yo utilizo en programas que manejan más de cien tablas, con integridad referencial.

Muy avanzado:
Yo sé que hay un problema de concurrencia; en el momento de la edición.
Pero en el 99% de los casos no es problema. Solo cuando la tabla maestra
es modificada muchas veces por muchos usuarios. Este es el método
"desconectado" que se ha hecho muy popular últimamente. Una ventaja
es que el Objeto "MyObjetoParaCombo" sirve tanto para ComboBox como
para transmitirlo por un WebService, serializado como XML, etc.

Última edición por HackmanC; 24/03/2008 a las 01:09 Razón: last edit ... :)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:15.