Método setSelectedItem en una jComboBox

Establecer un elemento seleccionado en una combobox en Java

En un componente Swing JComboBox (un campo desplegable), se puede establecer un elemento seleccionado por defecto con los métodos setSelectedIndex o setSelectedItem.

Si el combobox muestra un listado de Strings, se puede utilizar setSelectedItem y pasarle por parámetro la String que se quiere marcar. El problema viene cuando el componente desplegable contiene una lista de objetos distintos de una String. El método setSelectedItem no funcionará a menos que hagamos algunos cambios.

Ejemplo

Supongamos que se tiene una combobox con un listado de objetos que representan provincias. Cada objeto provincia tiene dos parámetros, un identificador numérico (el valor que queremos obtener) y un texto (la provincia que queremos que el usuario vea).

En la clase Provincia deberemos sobreescribir los métodos equals y hashcode para adaptarlos a nuestro objeto y para que al buscar un objeto equivalente lo encuentre.

public class Provincia {

    public String texto;
    public int id;

    public String toString() {
        return texto;
    }

    @Override
    public boolean equals(Object o) {
        if (o == null) {
            return false;
        }
        if (this == o) {
            return true;
        }
        if (!(o instanceof Provincia)) {
            return false;
        }
        Provincia provincia = (Provincia) o;

        if (id != provincia.id) {
            return false;
        }
        if (texto != null ? !texto.equals(provincia.texto) : provincia.texto != null) {
            return false;
        }

        return true;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 89 * hash + (this.texto != null ? this.texto.hashCode() : 0);
        hash = 89 * hash + this.id;
        return hash;
    }
}

Ahora con el siguiente código se establece el elemento que se quiera que esté seleccionado por defecto definiendo unos valores que estén en la lista.

Provincia elemento = new Provincia();
elemento.id = 3;
elemento.text = "Barcelona";
this.cmbprovincia.setSelectedItem(elemento);