Los desplegables son uno de los elementos principales a la hora de permitir al usuario seleccionar datos. Los ComboBox realizan esta tarea, permitiendo desde modelos simples donde tan solo se muestran datos hasta modelos complejos donde cada elemento tiene un objeto asociado

Antes de trabajar con este tipo de elementos hay que tener claro que un combo cuenta con parte gráfica (el propio elemento) y parte de datos (los elementos que serán seleccionables). La forma más simple de trabajar un combo es indicarle esta parte de datos como un array corriente en constructor

String [] opciones = {"Opción 1","Opción 2","Opción 3","Opción 4"};
JComboBox comboBox = new JComboBox(opciones);

Los principales métodos de este elemento son:

//Obtiene el índice del elemento seleccionado
comboBox.getSelectedIndex();
//Obtiene el elemento del índica indicado
comboBox.getItemAt(0);
//Selecciona el elemento sitiado en el índice indicado
comboBox.setSelectedIndex(0);
//Añade el elemento indicado en la última posicion disponible
comboBox.addItem(new String("Opción 5"));
//Permite editar el contenido del combo
comboBox.setEditable(true)
//Asocia un modelo al componente
comboBox.setModel(new DefaultComboBoxModel)

En el caso de incluir objetos en el combo tan solo habría que sobre escribir el método toString de la clase asociada para que sea mostrada correctamente

Manejo de eventos

Al tratarse de un elemento del que se quiere obtener la selección al cambiar el valor, se puede utilizar un ItemListener para obtener dicho valor

comboBox.addItemListener(new ItemListener() {
    @Override
    public void itemStateChanged(ItemEvent e) {
        System.out.println(((Objeto)e.getItem()).getValor());
    }
});

Modelo de datos

Además de tener la posibilidad crear el elemento como se ha explicado en la parte de arriba, lo normal es que este tipo de elementos tenga un modelo de datos que separe la parte gráfica de la parte de datos. Para ello lo que hay que hacer es o bien utilizar uno por defecto o crear uno extendiendo de DefaultComboBoxModel.

DefaultComboBoxModel model = new DefaultComboBoxModel(opciones);
JComboBox comboBoxModelo = new JComboBox(model);

//ó setear el modelo al combo 
comboBoxModelo.setModel(model);

En el caso de extender de la clase AbstractListModel e implementar DefaultComboBoxModel sobre escribiendo los métodos asociados

public class ModeloPropio extends AbstractListModel implements ComboBoxModel {

    ArrayList elementos;
    Object seleccion;

    public ModeloPropio(ArrayList arrayList) {

    elementos = arrayList;
    }
    
    @Override
    public void setSelectedItem(Object anItem) {
        seleccion = anItem;
    }

    @Override
    public Object getSelectedItem() {
        return seleccion;
    }

    @Override
    public int getSize() {
        return elementos.size();
    }

    @Override
    public Object getElementAt(int index) {
        return elementos.get(index);
    }
}

y en la clase poner el modelo con el constructor deseado.

ArrayList listaElementos = new ArrayList();
for (int i = 0; i<100;i++){
    listaElementos.add(i);
}

ModeloPropio modeloPropio = new ModeloPropio(listaElementos);
comboBoxModelo.setModel(modeloPropio);

comboBoxModelo.addItemListener(new ItemListener() {
    @Override
    public void itemStateChanged(ItemEvent e) {
        System.out.println(e.getItem().toString());
    }
});