Dic 15 2009

Elementos en un JComboBox

Categoría: POO,ProgramaciónMiguel Angel @ 1:58

Una pregunta muy común en los alumnos cuando se inician en la secta Java es cómo «rellenar» de elementos un JComboBox. Si visitamos el API de Java vemos que el método necesario para añadirlos es ‘addItem‘. Siendo la primera tentación pasarle como parámetro un String con el titulo a mostrar. Esto es correcto ya que String, como cualquier clase en Java, hereda de Object y, por tanto, es un parámetro válido.

Pero… si la declaración del método addItem nos indica que podemos pasar por parámetro un objeto de la clase Object (o una subclase de esta, como String), ¿por qué no pasar un objeto de una clase creada por nosotros y, de esta forma, utilizar un JComboBox de forma similar a un Vector, como una colección de objetos?

Por ejemplo, pensemos que tenemos una aplicación que gestiona productos de cualquier tipo y queremos que al seleccionar un producto obtengamos los datos de dicho producto para mostrarlos por pantalla. Lo interesante sería guardar los objetos de la clase Producto dentro de combo y seleccionar el deseado.

La forma de actuar es sencilla… añadir los objetos de Producto en el combo.

Producto producto = new Producto(parámetros);

JComboBox jcb = new JComboBox();

jcb.addItem(producto);

y, cuando lo necesitemos, recuperar el producto seleccionado

Producto productoSeleccionado = (Producto) jcb.getSelectedItem();

Hasta aquí todo correcto pero… al cargar el listado de objetos en el combo vemos que el titulo mostrado es similar a este: ‘paquete1.paquete2.Producto@idDelObjeto’. Y surge la duda: ¿podemos cambiar el texto mostrado? Evidentemente la respuesta es sí. Lo único que hay que hacer es sobreescribir en la clase Producto el método toString de Object. Recordemos que esta clase es de la que heredan de manera implícita todas las clases en Java. Por tanto, sólo tendremos que añadir este método en Producto:

public String toString(){

return «nuevo texto»;

}

Etiquetas: , , ,

3 Respuestas a “Elementos en un JComboBox”

  1. Bryan dice:

    Quisiera que me ayudara con una dificultad que tengo ya que al momento de hacer «Producto productoSeleccionado = (Producto) jcb.getSelectedItem();» en mi caso «Jugadores play = (Jugadores) jugadores.getSelectedItem();»

    éste es el error que me manda
    ava.lang.ClassCastException: java.lang.String cannot be cast to tijuana.Jugadores
    at tijuana.FrameVer.actionPerformed(FrameVer.java:104)

    de ante mano muchas gracias

  2. Miguel Angel dice:

    Hola,

    Los objetos que insertas en el jcombobox son de tipo tijuana.Jugadores??

    Es decir: jcb.addItem(new tijuana.Jugadores())

    Una recomendación… una clase no tiene nombre en plural. El plural son los objetos, la clase es singular.

    Un saludo,

  3. Leonel dice:

    Muchisimas gracias por este ejemplo. He logrado resolver un error que tenia mi programa.

Dejar una respuesta