Source-code: Como carregar JComboBox a partir de um SQL

Pessoal, achei legal postar esse codigo pra ajudar uma galera.
É um ComboBoxModel que pode ser criado a partir de um ArrayList, um ResultSet ou um SQL enviando com a conexao.

Fiquem a vonts:

/* 
 * Criado por Bruno R. Lima em 03/02/2005
 */
package combobox;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel;

/**
 * Model para ComboBox que pode ser carregado a partir de um SQL ou 
 * ResultSet ou memso o array.
 * 
 * @author Bruno Rios Lima
 */
public class DBComboModel extends AbstractListModel implements ComboBoxModel{
    
	private ArrayList lista;
	public int indexSelected;

	/**
	 * Construtor para a classe ComboModel.java.
	 * 
	 * @param lista lista com os valores carregados.
	 */
	public DBComboModel(ArrayList lista){
		this.lista = lista;
	}
	
	/**
	 * Construtor para a classe ComboModel.java.
	 */
	public DBComboModel(){
	}
	
	/**
	 * Construtor para a classe ComboModel.java.
	 * 
	 * @param sql SQL que será executado
	 * @param column coluna de qual o model vai retirar os valores da linha
	 * @param conn a conexao que será executado o SQL
	 * @throws SQLException
	 */
	public DBComboModel(String sql, int column, Connection conn)  throws SQLException{
	    loadDataFromSQL(sql, column, conn);
	}
	
	/**
	 * Adiciona um elemneto
	 * @param anObject
	 */
	public void addElement(Object anObject){
		lista.add(anObject);
	}
	
	/**
	 * Retorna o elemento no indice informado
	 */
	public Object getElementAt(int index) {
		return lista.get(index);
	}
	
	/**
	 * Retorna o indice do elemtno informado
	 * @param anObject
	 * @return
	 */
	public int getIndexOf(Object anObject){
		int index = 0;
		for(int i=0;i<=lista.size()-1;i++){
			if(((Estado)lista.get(i)).getId() == ((Estado)anObject).getId()){
				index = i;
				break;
			}
		}
		return index;
	}
	
	/**
	 * Seta como item selecionado
	 */
	public void setSelectedItem(Object anObject){
		for(int i=0;i<=lista.size()-1;i++){
			if(((Estado)lista.get(i)).getId() == ((Estado)anObject).getId()){
				indexSelected = i;
				break;
			}
		}
	}
	
	/**
	 * Retorna o item selecionado
	 */
	public Object getSelectedItem() {
		return lista.get(indexSelected);
	}
	
	/**
	 * Retorna o tamanho do modelo ( total de itens )
	 */
	public int getSize() {
		return lista.size();
	}
	
	/**
	 * insere im novo elemtno na posicao infomada
	 * @param anObject
	 * @param index
	 */
	public void insertElementAt(Object anObject, int index){
		lista.add(index,anObject);
	}
	
	/**
	 * Remove todos os componetes
	 *
	 */
	public void removeAllElements(){
		lista = new ArrayList();
	}
	
	/**
	 * Remove um dado elemento
	 * @param anObject
	 */
	public void removeElement(Object anObject){
		for(int i=0;i<=lista.size()-1;i++){
			if(((Estado)lista.get(i)).getId() == ((Estado)anObject).getId()){
				lista.remove(i);
				break;
			}
		}
	}
	
	/**
	 * Remove o elemento no indice informado
	 * @param index
	 */
	public void removeElementAt(int index){
		lista.remove(index);
	}
	
	/**
	 * Carrega o modelo com base no resultset informado e na coluna desejada
     * Apenas carrega mais valores na combo.
	 * @param rs
	 * @param column
	 * @throws SQLException
	 */
    public void loadData(ResultSet rs, int column) throws SQLException{
        
        // looping para alimentar os dados
        ResultSetMetaData m = rs.getMetaData();
        
        // Carrega os dados
        while(rs.next()){
            addElement(rs.getObject(column));            
        }
        
    }

    /**
     * Executa o SQL passando na conexao enviada, retirando o valor da coluna passada.
     * Apenas carrega mais valores na combo.
     * @param sql
     * @param column
     * @param conn
     * @throws SQLException
     */
    public void loadDataFromSQL(String sql, int column, Connection conn) throws SQLException{
        Statement cstmt = conn.createStatement();
        ResultSet rset = cstmt.executeQuery(sql);
        loadData(rset, column);
    }
	
}
if(((Estado)lista.get(i)).getId() == ((Estado)anObject).getId()){


if(((Estado)lista.get(i)).getId() == ((Estado)anObject).getId()){


if(((Estado)lista.get(i)).getId() == ((Estado)anObject).getId()){

O que seriam estes casts Bruno? Ta faltando alguma classe?

Boa tarde a todos.

Presumindo que a classe "Estado" seja uma classe implementada pelo nosso amigo, pois tentou fazer um ComboBoxModel particular, dai a necessidade de se fazer o Casting, entretanto fiz uma correção, cujo código segue abaixo, que achei mais simples, pois se o método recebe um parâmetro Objeto, então voce deve compará-lo com o Objeto da lista e não com o seu index ou seu ID, o que não faz sentido.

public int getIndexOf(Object anObject){
        int index = 0;
        for(int i=0; i&lt;=lista.size()-1; i++){
            if(getElementAt(i) == anObject) {
                index = i;
                break;
            }
        }
        return index;
}
...
...
...
@Override
public void setSelectedItem(Object anObject){
        for(int i=0;i&lt;=lista.size()-1;i++){
            if(getElementAt(i) == anObject) {
                indexSelected = i;
                break;
            }
        }
}
...
...
...
public void removeElement(Object anObject){
        for(int i=0;i&lt;=lista.size()-1;i++){
            if(getElementAt(i) == anObject) {
                lista.remove(i);
                break;
            }
        }
}