Este objeto permite generar una lista desplegable que nos muestra varios elementos de los cuales el usuario solo puede seleccionar uno.
Este objeto nos proporciona el método addItem que permite agregar opciones al combo.
En este curso de java te mostraremos varios ejemplos del objeto JComboBox.
Desarrolle programa que muestre un combo con tres opciones.
DemoJComboBox.java
import java.awt.*;
import javax.swing.*;
public class DemoJComboBox extends JFrame{
public DemoJComboBox(){
JComboBox combo = new JComboBox();
combo.addItem("CURSO DE DISEÑO");
combo.addItem("CURSO DE PROGRAMACION");
combo.addItem("CUROS DE BASE DE DATOS");
setLayout(new FlowLayout());
add(new JLabel("Especialidad"));
add(combo);
setSize(400,300);
setVisible(true);
}
public static void main(String[] args){
new DemoJComboBox();
}
}
El método getSelectedItem nos permite saber cuál fue el ítem que recibió el clic.
Nota: Este método nos regresa un Object.
El objeto JComboBox tiene también la posibilidad de cargar los elementos mediante un arreglo proporcionado en su constructor.
Desarrolle programa que muestre las selecciones del usuario.
DemoCombo.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*; public class DemoCombo extends JFrame implements ActionListener{
JComboBox combo = new JComboBox();
TextArea area = new TextArea(5,10);
public DemoCombo() {
setLayout(new FlowLayout ());
add(new JLabel("Selecciona área"));
combo.addItem("Diseño");
combo.addItem("Programación");
combo.addActionListener(this);
add(combo);
add (area);
setSize(300,200);
setVisible(true);
}
public void actionPerformed (ActionEvent evt){
JComboBox elCombo=(JComboBox)evt.getSource();
String selItem=(String)elCombo.getSelectedItem();
area.append(selItem +"\n" );
}
public static void main (String [] args){
new DemoCombo();
}
}
Consejo
Hay programadores que utilizan una codificación compleja para realizar un paso de objetos y métodos, por ejemplo, esta línea:
(String)(((JComboBox)(evt.getSource())).getSelectedItem());
Pero es recomendable ser más específico y hacerlo por pasos.
Esto facilita el mantenimiento del programa y para que otros programadores lo puedan entender con facilidad.
Se usará la línea especificada en párafos anteriores para conocer su funcionalidad.
DemoComboBox2.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class DemoJComboBox2 extends JFrame{
JTextArea area;
public DemoJComboBox2(){
JComboBox combo = new JComboBox();
area = new JTextArea(5,20);
combo.addItem("DISEÑO");
combo.addItem("PROGRAMACION");
combo.addItem("OTRO");
setLayout(new FlowLayout());
add(new JLabel("Especialidad"));
add(combo);
setSize(400,300);
setVisible(true);
}
public void actionPerformed(ActionEvent evt){
String temporal = (String)(((JComboBox)(evt.getSource())).getSelectedItem());
area.append(temporal +"\n");
}
public static void main(String[] args){
new DemoJComboBox2();
}
}
El siguiente programa deberá escribir el ítem seleccionado del ComboBox en un TextArea; pero se debe hacer que cada uno pueda ser escrito solo una vez aun cuando vuelva a ser seleccionado.
DemoArreglo2.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class DemoArreglo2 extends JFrame implements ActionListener{
JTextArea area;
// Define y carga el arreglo
String sabores[] = {"Vainilla","Fresa","Chocolate"};
Integer ctaVainilla, ctaFresa, ctaChocolate;
int pedidos[] = new int[3]; //Agrego arreglo para contar clics
public DemoArreglo2(){
area = new JTextArea(5,20); // Al constructor le pasamos el arreglo
JComboBox combo = new JComboBox(sabores);
setLayout(new FlowLayout());
add(new JLabel("Seleccione sabor "));
add(combo);
add(area);
combo.addActionListener(this);
setSize(400, 300);
setVisible(true);
}
public void actionPerformed(ActionEvent evt){
int indice = ((JComboBox)(evt.getSource())).getSelectedIndex();
pedidos[indice]=pedidos[indice]+1;// Incremento numero de clics
area.setText("");//Limpia contenido del textArea
for(int i=0; i<sabores.length;i++){
if (pedidos[i] > 0)
area.append(sabores[i]+" " +pedidos[i]+"\n");
}
}
public static void main(String[] args){
new DemoArreglo2();
}
}
A continuación se muestra otra Forma de validación utilizando indexOf.
En este programa se introduce un contador para cada sabor, de tal forma que nos diga cuántos de cada sabor se han pedido.
DemoValidacionIndexOf.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class DemoValidacionIndexOf extends JFrame implements ActionListener{
JTextArea area;
public DemoValidacionIndexOf(){
JComboBox combo = new JComboBox();
area = new JTextArea(5,20);
combo.addItem("DISEÑO");
combo.addItem("PROGRAMACION");
combo.addItem("OTRO");
setLayout(new FlowLayout());
add(new JLabel("Especialidad"));
add(combo);
add(area);
combo.addActionListener(this);
setSize(400,300);
setVisible(true);
}
public void actionPerformed(ActionEvent evt){
String temporal = (String)(((JComboBox)(evt.getSource())).getSelectedItem());;
String contenidoArea = area.getText().trim();
System.out.println (contenidoArea.indexOf(temporal)); // indexOf regresa -1 si no lo encuentra.
if(contenidoArea.indexOf(temporal) == -1)
area.append(temporal +"\n"); // si no lo encontro lo agrega.
}
public static void main(String[] args){
new DemoValidacionIndexOf();
}
}
En este programa, hay que modificar el DemoValidacionIndexOf.java para que, al escoger los sabores, respete el orden en que fue pedido; por que siempre ordena los sabores de acuerdo a los índices vainilla, fresa chocolate.
DemoArreglo3.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class DemoArreglo3 extends JFrame implements ActionListener{
JTextArea area;
// Define y carga el arreglo
String sabores[] = {"Vainilla","Fresa","Chocolate"};
int pedidos [] = new int[3];//Agrego arreglo para contar cliks
int ordenEntrada[]= new int[3];
int contador=0;
public DemoArreglo3(){
for(int i=0;i<sabores.length;i++){ //Inicializo arreglo con valores finales //asigna constante al -1 al elemento correspondiente
ordenEntrada[i]=-1;
} area = new JTextArea(5,20);
JComboBox combo = new JComboBox(sabores);
setLayout(new FlowLayout());
add(new JLabel("Seleccione sabor "));
add(combo);
add(area);
combo.addActionListener(this);
setSize(400, 300);
setVisible(true);
}
public void actionPerformed(ActionEvent evt){
int indice = ((JComboBox) (evt.getSource())).getSelectedIndex(); //Incremento en 1 el elemento correspondiente.
pedidos[indice]=pedidos[indice]+1;
int esta=0;// Inicializa bandera
for (int i=0;i<3;i++){
if(indice==ordenEntrada[i]){ //comparo con indice
esta=1;
}
}
if(esta==0){
ordenEntrada[contador]=indice;
contador ++;
}
area.setText("");//Limpia contenido del textArea
for(int i=0; i<contador; i++){
System.out.println(ordenEntrada[i]);
if(pedidos[ordenEntrada[i]]>0)
area.append( sabores[ordenEntrada[i]]+pedidos[ordenEntrada[i]]+"\n");
//area.append(sabores[i]+""+pedidos[i]+"\n");
}
}
public static void main(String[] args){
new DemoArreglo3();
}
}