Action Listener em ComboBox dentro de JTable que altera o valor de outro combobox na mesma linha

Pessoal,

Possuo uma JTable com colunas Cidade e Estado, em que cada uma delas possui um JComboBox. Até aí beleza, tudo ok.

O problema é o seguinte: quando eu atualizo a Combo de Estados, automaticamente preciso atualizar a Combo de Cidades, para mostrar apenas as cidades daquele estado.

Montei o código, está conforme abaixo:

[code]private void preencheTabela( ArrayList info, javax.swing.JTable tabela )
{
DefaultTableModel modeloTabela = ( DefaultTableModel ) tabela.getModel();
modeloTabela.setRowCount( 0 );
for( Pessoa it : info )
{
Fornecedor f = ( Fornecedor ) it;
String row[] = new String[ tabela.getColumnCount() ];
row[ 0 ] = f.getNome();
row[ 1 ] = f.getCnpj();
row[ 2 ] = f.getEndereco();
row[ 3 ] = f.getCidade().getNome();
row[ 4 ] = f.getCidade().getEstado().getNome();
row[ 6 ] = f.getObservacao();

        ArrayList<Telefone> listaTel = new TelefoneDAO().consultar( f );
        row[ 5 ] = "( " + listaTel.get( 0 ).getDdd() + " ) " + listaTel.get( 0 ).getNumero() + " - " + listaTel.get( 0 ).getTipo().getDescricaoTipo();
        
        TableColumn colunaTel = tabela.getColumnModel().getColumn( 5 );
        javax.swing.JComboBox comboTels = new javax.swing.JComboBox();
        
        for( Telefone itTel : listaTel )
        {
            comboTels.addItem( "( " + itTel.getDdd() + " ) " + itTel.getNumero() + " - " + itTel.getTipo().getDescricaoTipo() );
        }           
        colunaTel.setCellEditor( new DefaultCellEditor( comboTels ) );
        
                
        TableColumn colunaEstado = tabela.getColumnModel().getColumn( 4 );
        javax.swing.JComboBox comboEstados = new javax.swing.JComboBox( new Dados.Estado().listar() );
        colunaEstado.setCellEditor( new DefaultCellEditor( comboEstados ) );
        /*comboEstados.addActionListener( new ActionListener() {

            public void actionPerformed(ActionEvent e) {
               preencheComboCidadesTabela();
            }

        });*/
        TableColumn colunaCidade = tabela.getColumnModel().getColumn( 3 );
        javax.swing.JComboBox comboCidades = new javax.swing.JComboBox( new Dados.Cidade().listar( new EstadoDAO().consultar( row[ 4 ] ) ) );
        colunaCidade.setCellEditor( new DefaultCellEditor( comboCidades ) );
        comboCidades.addActionListener( new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                preencheComboCidadesTabela();
            }
        } );
        
               
        modeloTabela.addRow( row );

    }
    tabela.setModel( modeloTabela );
}

private void preencheComboCidadesTabela()
{
   if( jTable1.getEditingRow() < 0 )
   {
       return;
   }
   
   String estado = jTable1.getValueAt( jTable1.getSelectedRow(), 4 ).toString();
   System.out.println( estado );
   TableColumn colunaCidade = jTable1.getColumnModel().getColumn( 3 );
   Component comboCidade = jTable1.getCellEditor().getTableCellEditorComponent(jTable1, "", true, jTable1.getSelectedRow(), 3 );
   JComboBox novo = ( ( JComboBox ) comboCidade );
   novo.setModel( 
           new DefaultComboBoxModel( new Dados.Cidade().listar( new EstadoDAO().consultar(estado))) );
  
   novo.addActionListener( new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            preencheComboCidadesTabela();
        }
    });
    colunaCidade.setCellEditor( new DefaultCellEditor( ( ( JComboBox ) comboCidade ) ) );
}[/code]

O problema é que isso funciona apenas a primeira vez que o usuário altera a Combo de Estados. Nas próximas vezes que eu altero lá, permanece o mesmo valor na ComboBox de cidades.

Alguma dica ou implementação mais simples para isso?