Ok, problema resolvido.
A situação é que eu possuo uma tabela de produtos (eles não podem repetir), e cada produto pode ser encontrado em diversos supermercados, não necessariamente os mesmos para cada produto.
Nesta tabela há informações sobre os produtos referentes ao supermercado em que se encontra, como o preço. (Cada produto em um supermercado tem um preço)
Minha tabela é mais ou menos assim então: Produto, Supermercado, Preço.
O que eu precisava era de comboBoxs para que o usuário escolhesse o supermercado e a tabela automaticamente mostrasse as informações deste produto no supermercado selecionado.
O que eu fiz no final foi o seguinte:
No meu tableModel, para o getValueAt da coluna do supermercado eu retorno somente a descrição deste supermercado:
public Object getValueAt(int row, int column) {
Ordem o=valores.get(row);
boolean selecao=selecionados.get(row);
SupermercadoProduto[] sp=superProds.get(row);
switch (column) {
case COL_SUPERMERCADO:
return o.getSupermercadoProduto().getSupermercado().getDescricao();
Para a coluna onde eu quero o jComboBox eu defino o meu próprio cellEditor:
TableColumnModel columnModel = jtMovel.getColumnModel();
TableColumn tableColumn = columnModel.getColumn(OrdemTable.COL_SUPERMERCADO-OrdemTable.COLUNAS_FIXAS);
tableColumn.setCellEditor(new SupermercadoCellEditor());
E no meu editor, para pegar os valores do comboBox, eu tive que apelar: Eu pego o código do produto (minha cheve primária da tabela) da linha editada, e busco no modelo as informações para o comboBox:
[code] private class SupermercadoCellEditor extends AbstractCellEditor
implements TableCellEditor {
private JComboBox field;
private SupermercadoProduto[] supers;
//Ao editar a célula este método cria um jComboBox
@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
//Na tabela não existe o array com os supermercados em que o produto se encontra, só o modelo tem essa informação
//Então pela chave primária da tabela, eu busco o array no modelo
String produtoCodigo=(String) getTabelaFixa().getValueAt(row,OrdemTable.COL_CODIGO);
for(int i=0;i<getControlador().getModelo().getModeloTabela().getRowCount();i++){
if(produtoCodigo.compareTo((String)getControlador().getModelo().getModeloTabela().getValueAt(i, OrdemTable.COL_CODIGO))==0){
supers=(SupermercadoProduto[]) getControlador().getModelo().getModeloTabela().getValueAt(i, OrdemTable.COL_SUPERSPRODS);
i=getControlador().getModelo().getModeloTabela().getRowCount();
}
}
//Defino os valores para o comboBox
String[]combo=new String[supers.length];
for(int i=0;i<supers.length;i++){
combo[i]=supers[i].getSupermercado().getDescricao();
}
//Crio e retorno o comboBox
JComboBox comboBox=new JComboBox(combo);
comboBox.setSelectedItem(value);
field=comboBox;
return field;
}
//Ao final da edição o valor retornado para o TableModel vem desta função.
@Override
public Object getCellEditorValue() {
return supers[field.getSelectedIndex()];
}
}
[/code]
É isso, obrigado pela ajuda e fica aí a solução.
Abraços