Tutorial de Java Swing (12): JComboBox.


Veamos ahora el comportamiento básico del componente JComboBox. Este componente permite seleccionar un elemento de una lista. El ejercicio consiste en presentar un JFrame, que a su vez contiene un panel y éste contiene:

  • Una etiqueta (JLabel) con el texto “Seleccione una Opción:”
  • Una caja combinada (JComboBox) con dos opciones (Hombre, Mujer), que se introducen a través de la propiedad Model.
  • Una etiqueta (JLabel) que contiene inicialmente un icono que se corresponde con un chico.

El ejercicio consiste en capturar la acción del cambio/selección del elemento de la lista de la caja realizado por el usuario. Para comprobar la selección del elemento de la lista asignaremos a la segunda etiqueta un icono de un chico o una chica según se seleccione Hombre o Mujer respectivamente.

Es decir:

Para realizar este ejemplo:

1.- Inicie una sesión de NetBeans y haga “proyecto Nuevo”, “Java” y finalmente “Java Aplicacion”. He llamado al proyecto “combobox”. Una vez que NetBeans muestre la clase principal, añadimos al proyecto (botón derecho sobre el proyecto), un JFrame al que llamaremos ventana.

2.- Permitiremos desde el método main de la clase Main, crear o instanciar la clase ventana y visualizarla con el código

ventana pantalla = new ventana();
pantalla.setVisible(true);

3.-Construimos la interfaz del JFrame tal como se ha planteado. La asignación del icono se realiza a través de la propiedad “icon” de la segunda etiqueta, a través del cuadro de diálogo siguiente:

Puede descargar desde aquí los iconos del  chico/a , estos iconos, en mi caso, están colocados en la carpeta del proyecto, en mi caso “combobox”.

4.- Definimos dos iconos denominados iconochico e iconochica dentro de la clase ventana en la forma

ImageIcon iconochico = new ImageIcon(getClass().getResource(“/combobox/chico.png”));
ImageIcon iconochica = new ImageIcon(getClass().getResource(“/combobox/chica.png”));

para poder hacer esto hay que importar la definición de la clase IMageIcon a través de la instrucción

import javax.swing.ImageIcon;

colocada justo debajo de la incorporación del paquete  combobox;

5.- Finalmente, abrimos el evento actionPerformed del componente JComboBox para escribir el siguiente código:

Integer indice = jComboBox1.getSelectedIndex();

if (indice.equals(0))
{
jLabel1.setIcon(iconochico);
}
else if (indice.equals(1))
{
jLabel1.setIcon(iconochica);
}
else  jLabel1.setIcon(null);

Véase que el método getSelectedIndex() proporciona el índice, comenzando por cero, del elemento seleccionado por el usuario según la lista de valores.

Este es un método fundamental de este componente, junto con  getSelectedItem() y getItemCount().

Se sugiere al lector que pruebe con estos métodos…

Para utilizar getSelectedItem(), añada una nueva etiqueta (jLabel3) y en el evento anterior escriba

String elemento = (String)jComboBox1.getSelectedItem();
jLabel3.setText(elemento);

Para utilizar getItemCount(), añada una nueva etiqueta (jLabel4) y en el evento anterior escriba

Integer num = jComboBox1.getItemCount();
jLabel4.setText(String.valueOf(num));

Vea, que cuando cambia el valor seleccionado de la caja combinada las etiquetas 3 y 4 toman los valores “Hombre” y “2″ respectivamente. Esto se debe al código anterior, sin embargo, la primera vez, cuando se activa el formato los textos de las etiquetas son “jlabel1″ y “jlabel2″. ¿Puede mejorarse esto? ¿Porqué no aparece el texto del item previamente seleccionado, así como el número de opciones que tiene la caja combinada?…

Le sugiero que investigue en el evento “WindowsActivated” del componente JFrame…

Envía un comentario o deja una ruta: Trackback URL.

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.