domingo, 17 de abril de 2016

Uso Básico de JComboBox en Java

Retomando las entradas sobre Java Swing, voy a mostrarles como trabajar con el componente JComboBox.... ya en el post sobre los Componentes Atómicos trabajamos con los combos de selección pero de una forma general, ahora nos enfocaremos en lo que debemos saber... aquí también podrás ver un vídeo con el paso a paso de la entrada....



Ya hemos hablado que los JCombobox permiten definir listas de selección, siendo muy útiles cuando queremos mostrar diferentes opciones o información de nuestra base de datos, esta se mantendrá oculta hasta que se despliega el componente...

El Ejemplo.

Con este ejemplo tan solo mostraré como crearlo y como asignarle valores directamente, esto lo podemos realizar mediante 2 formas, inicialmente crearemos la clase principal que contiene el método main y luego iremos viendo el paso a paso en la construcción del combo.

Clase Principal

Esta clase tan solo se encargará de llamar a la ventana con el combo...
public class Principal {
 public static void main(String[] args) {
  VentanaPrincipal miVentana=new VentanaPrincipal();
  miVentana.setVisible(true);
 }
}

Clase VentanaPrincipal.

Esta clase corresponde a la ventana de nuestro sistema, tan solo cuenta con 2 componentes, el JComboBox y un JLabel el que nos mostrará cual fue la opción seleccionada.


Al ejecutar nuestro sistema tan solo veremos la ventana con un combo vacio y un texto en pantalla, ahora veamos las 2 formas que podemos usar para el llenado de los items


Forma 1.
La primer forma es muy común cuando usamos una paleta de componentes, pues estas nos auto generan el código necesario para llenar nuestro combo

Para hacerlo debemos importar DefaultComboBoxModel...
import javax.swing.DefaultComboBoxModel;

posteriormente creamos las opciones de la siguiente manera.
combo1.setModel(new DefaultComboBoxModel<>(new String[]{"Seleccione","Opcion1","Opcion2"}));

como vemos podemos agregar los items directamente, o tambien dependiendo de la cantidad podriamos generar un arreglo de valores y asignarlo en los parentesis, remplazando todo desde el new String...
String arregloItems[]=new String[]{"Seleccione","Opcion1","Opcion2"};
combo1.setModel(new DefaultComboBoxModel<>(arregloItems));

Independiente de la forma el resultado será el mismo, puedes verificarlo ejecutando tu aplicación.

Forma 2.
Esta segunda forma a mi parecer es la mas simple y fácil de entender, ya que tan solo debemos utilizar el método additem() que nos provee el componente, comentamos la forma anterior y agregamos lo siguiente.
combo1.addItem("Seleccione");
combo1.addItem("Opcion 1");
combo1.addItem("Opcion 2");
combo1.addItem("Opcion 3");
combo1.addItem("Opcion 4");
combo1.setSelectedIndex(3);

Adicionalmente el uso de el método addItem() nos da mayor libertad para agregar elementos de forma dinámica, por ejemplo en un ciclo cuando obtenemos datos de nuestra base de datos...

Por ultimo podemos implementar la interface ActionListener para reconocer cuando seleccionamos una opción..... al final debemos tener algo así:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class VentanaPrincipal extends JFrame implements ActionListener{
 
 JComboBox combo1;
 JLabel lblMsj;

 public VentanaPrincipal() {
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setSize(219, 200);
  getContentPane().setLayout(null);
  setLocationRelativeTo(null);
  
  iniciarComponentes();
 }
 private void iniciarComponentes() {
  
  lblMsj=new JLabel();
  lblMsj.setText("Selección: ");
  lblMsj.setBounds(29, 100, 180, 20);
  combo1=new JComboBox();
  combo1.setBounds(29, 35, 148, 20);
 
 //FORMA 1
 //String arregloItems[]=new String[]{"Seleccione","Opcion1","Opcion2"};
 //combo1.setModel(new DefaultComboBoxModel<>(arregloItems));
  
 //FORMA 2 
  combo1.addItem("Seleccione");
  combo1.addItem("Opcion 1");
  combo1.addItem("Opcion 2");
  combo1.addItem("Opcion 3");
  combo1.addItem("Opcion 4");
  combo1.setSelectedIndex(3);
  
  add(combo1);
  add(lblMsj);
 }
 
 @Override
 public void actionPerformed(ActionEvent e) {
  if (e.getSource()==combo1) {
   lblMsj.setText(combo1.getSelectedIndex()+" - "+combo1.getSelectedItem());
  }
 }
}

//
Notemos que se usa el método setSelectedIndex(3) esto permitirá cargar el combo con el valor definido por el indice 3, mostrando así la "Opcion 3", si quisiéramos que se mostrara la palabra "Seleccione" entonces el parámetro enviado debería ser 0...

Y listo, si ejecutamos nuestra aplicación veremos el funcionamiento del JComboBox, en la próxima entrada veremos algo similar pero obteniendo la información desde una Base de Datos....un saludo y espero que les pueda servir.



También te podría Interesar.

¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo.....y si te gustó...... te invito a compartir
 y Suscribirte ingresando al botón "Participar en este sitio" para darte cuenta de mas entradas como esta ;)

5 comentarios:

  1. como puedo invertir el orden de los items para que el combo muestre de mayor a menor?

    Saludos G

    ResponderEliminar
  2. Cuento con una aplicación hecha en Java Swing con conexión web a una DB en Mysql desde un cpanel, la aplicación tiene varios módulos, desde un pos hasta facturación, pasando por reportes, gastos y otras opciones; la aplicación es estable y funciona a la perfección, el tema pasa que si o sí funciona con conexión a internet. Aquí va el requerimiento:
    Que ante una eventual caída de internet, continúe trabajando sin problema, y que al restablecerse el servicio (internet), sincronice y almacene en la DB de la nube, todo esto sin que el usuario se vea afectado o tenga que parar. Lo ideal es que almacene en caché o en algún otro método, no quiero montar una DB local ni nada por el estilo.

    ResponderEliminar
    Respuestas
    1. espero puedas ayudarme, de antemano muchísimas gracias !!!

      Eliminar
  3. Excelente. Me sirvió el ejemplo. Muchas gracias.

    ResponderEliminar

Eres libre de realizar cualquier comentario, desde que pueda ayudar con gusto lo atenderé, y si es un critica, bienvenida sea!!!