Ejemplo sencillo de JComboBox

De ChuWiki


Qué es un JComboBox[editar]

Un JComboBox en Java es una lista desplegable que permite seleccionar uno de sus elementos. Es un componente javax.swing típico de un formulario de entrada de datos.

Ejemplo de JComboBox[editar]

Vamos a ver un pequeño programa sencillo de ejemplo de uso del JComboBox de Java. Abre una ventana con un JComboBox y un JTextField. Cada vez que seleccionemos uno de los items, se mostrará en el JTextField.

Cualquier duda sobre esto o de Java en general suelo atender en el foro de java

El código completo del ejemplo con JCombobox[editar]

El código completo sería este. Más abajo vamos explicando con detalle los puntos interesantes.

package chuidiang.ejemplos;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

/**
 * Ejemplo de uso de JComboBox.
 * @author chuidiang
 */
public class PruebaJComboBox {

	private JTextField tf;
	private JComboBox combo;
	private JFrame v;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new PruebaJComboBox();
	}
	
	public PruebaJComboBox()
	{
		// Creacion del JTextField
		tf = new JTextField(20);
		
		// Creacion del JComboBox y añadir los items.
		combo = new JComboBox();
		combo.addItem("uno");
		combo.addItem("dos");
		combo.addItem("tres");
		
		// Accion a realizar cuando el JComboBox cambia de item seleccionado.
		combo.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				tf.setText(combo.getSelectedItem().toString());
			}
		});

		// Creacion de la ventana con los componentes
		v = new JFrame();
		v.getContentPane().setLayout(new FlowLayout());
		v.getContentPane().add(combo);
		v.getContentPane().add(tf);
		v.pack();
		v.setVisible(true);
		v.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
}

Añadir items a un JComboBox[editar]

Podemos añadir cualquier objeto java como elemento en un JComboBox. JComboBox llamará al método toString() de dicho objeto para mostrarlo en la lista desplegable como una cadena de texto. Es bastante habitual símplemente añadir String como elementos del JComboBox. En cualquiera de los dos casos, basta llamar al método addItem() para añadir los elementos al JComboBox.

// Creacion del JComboBox y añadir los items.
combo = new JComboBox();
combo.addItem("uno");
combo.addItem("dos");
combo.addItem("tres");

Añadir un listener al JComboBox: addActionListener[editar]

Si nos queremos enterar de cuando el usuario cambia la selección del JComboBox debemos añadirle un listener, usando su método addActionListener(). A este listener sólo se nos avisará si hay cambio en la selección del JComboBox. Si el usuario abre el JComboBox y elige la misma opción que ya estaba seleccionada, no recibiremos ningún aviso.

combo.addActionListener(new ActionListener() {
   @Override
   public void actionPerformed(ActionEvent e) {
      // Aquí hacemos lo que queramos hacer.
   }
});

Obtener el item seleccionado en el JComboBox: getSelectedItem[editar]

Bien en el listener cuando hay un cambio en la selección del JComboBox, bien cuando nos interese, podemos coger el item seleccionado sin más que llamar al método getSelectedItem(). Este método nos devolverá un Object que será alguno de los item que pasamos en el addItem(). En este caso, String, así que podemos hacer el cast para saber exactamente la opción seleccionada.

String itemSeleecionado = (String)combo.getSelected(tem();
if ("uno".equals(itemSeleccionado) {
  ...
}

Otra opción es llamar a getSelectedIndex() que nos devolverá el índice del item seleccionado. Es decir, si está selecionado el primer item que añadimos al JComboBox, devolverá un 0, si el segundo, un 1 y así sucesivamente. Devuelve -1 si no hay ningún item seleccionado.

Fijar el item seleccionado en el JComboBox: setSelectedItem[editar]

Desde código podemos hacer que el JComboBox muestre uno de los item que tiene. Tenemos dos posiblidades:

  • setSelectedIndex() selecciona el item por su índice, es decir, setSelectedIndex(0) seleccionará el primer item que hayamos añadido al JComboBox. Si pasamos un -1 como parámetro, se deseleccionan todos los item.
  • setSelectedItem() selecciona el elemento que le pasemos como parámetro. Debemos pasarle uno de los que hayamos añadido al principo.

Añadir objetos al JComboBox[editar]

Hemos comentado que podemos añadir cualquier clase que queramos. El JComboBox llamará al método toString() de esa clase para saber qué pintar en la opción del menú. Podemos llamar a addItem() pasándole el objeto que queramos y getSelectedItem() nos devolverá ese objeto completo si está seleccionado.

Esto es útil si queremos que el JComobBox tenga en sus items más información que sólo el texto visible. Un ejemplo típico, si hemos recogido las opciones del JComboBox de una base de datos y queremos mantener el id de la base de datos además de un texto que sea visible en el JComboBox. Imagina, por ejemplo, que leemos de base de datos una lista de idiomas con id y son los que queremos mostrar en el JComboBox, pero sin perder el id de base de datos. Hacemos una clase como la siguiente

public class Pais {
   private long id;
   private String nombrePais;
   // getter y setter
   public String toString() {
      return nombrePais;
   }
}

En el JComboBox podemos añadir items de esta forma

Pais francia = new Pais(),
francia.setId(112234);
francia.setNombrePais("Francia");
...
combo.addItem(francia);

El JcomboBox mostrará "Francia" que es lo que le devolvería el método toString() de la clase Pais. Cuando queramos recoger el item seleccionado

Pais paisSeleccionado = (Pais)combo.getSelectedItem();
System.out.println("El id del pais es " + paisSeleccionado.getId());
System.out.println("El nombre del pais es " + paisSeleccionado.getNombrePais());

Tienes un ejemplo más elaborado en JComboBox Con Objetos y Base de Datos MySQL.

Cómo personalizar un JComboBox[editar]

En los siguientes enlaces tienes varias opciones para personalizar un JComboBox

Enlaces[editar]