Ver Mensaje Individual
  #4 (permalink)  
Antiguo 23/03/2008, 23:30
Avatar de HackmanC
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 ... :)