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?