Tenho uma JTable com model de Abstract Table e está funcionando perfeitamente, nela tenho algumas colunas e eu populo essa tabela com dados vindo do bd, cada linha tem um checkbox, permitindo que o usuário selecione quantas linhas quiser, e quando vou pegar as linhas que estão selecionadas sempre retorna false, estando marcado ou não. Estou usando getValueAt(0, 0) para receber o valor do checkbox, já tentei também utilizar o getSelectedRows() mas não funcionou também…
abstract table:
[code]public class CorreioTableModel extends AbstractTableModel
{
private static final int SELECIONADO = 0;
private static final int TRANSPORTADORA = 1;
private static final int BASE = 2;
private static final int CONTRATO = 3;
private static final int LOTE = 4;
private static final int NF = 5;
private static final int VALOR = 6;
private static final int NUMPROVISAO = 7;
private static final int VALORPROVISAO = 8;
private List<Correio> linhas;
private String[] colunas = new String[] {"", "Transportadora", "Base", "Contrato", "Lote", "NF", "Valor", "Nº Provisão", "Valor Provisão" };
public CorreioTableModel()
{
linhas = new ArrayList<Correio>();
}
public CorreioTableModel(List<Correio> tabelaCorreio)
{
linhas = new ArrayList<Correio>(tabelaCorreio);
}
@Override
public int getRowCount()
{
return linhas.size();
}
@Override
public int getColumnCount()
{
return colunas.length;
}
@Override
public String getColumnName(int columnIndex)
{
return colunas[columnIndex];
};
@Override
public Class<?> getColumnClass(int columnIndex)
{
switch (columnIndex)
{
case SELECIONADO:
return Boolean.class;
case TRANSPORTADORA:
return String.class;
case BASE:
return String.class;
case CONTRATO:
return String.class;
case LOTE:
return String.class;
case NF:
return int.class;
case VALOR:
return BigDecimal.class;
case NUMPROVISAO:
return int.class;
case VALORPROVISAO:
return BigDecimal.class;
default:
// Não deve ocorrer, pois só existem 9 colunas
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex)
{
// apenas o campo "SELECIONADO" será editável
return (columnIndex == SELECIONADO);
}
@Override
public Object getValueAt(int rowIndex, int columnIndex)
{
// Pega referente a linha especificada.
Correio correio = linhas.get(rowIndex);
switch (columnIndex)
{
case SELECIONADO:
return correio.isSelecionado();
case TRANSPORTADORA:
return correio.getTransportadora();
case BASE:
return correio.getBase();
case CONTRATO:
return correio.getContrato();
case LOTE:
return correio.getLote();
case NF:
return correio.getNF();
case VALOR:
return correio.getValor();
case NUMPROVISAO:
return correio.getNumProvisao();
case VALORPROVISAO:
return correio.getValorProvisao();
default:
// Não deve ocorrer, pois só existem 9 colunas
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex)
{
// Pega referente a linha especificada.
Correio correio = linhas.get(rowIndex);
switch (columnIndex)
{
case SELECIONADO:
correio.setSelecionado((Boolean) aValue);
break;
case TRANSPORTADORA:
correio.setTransportadora((String) aValue);
break;
case BASE:
correio.setBase((String) aValue);
break;
case CONTRATO:
correio.setContrato((String) aValue);
break;
case LOTE:
correio.setLote((String) aValue);
break;
case NF:
correio.setNF((int) aValue);
break;
case VALOR:
correio.setValor((BigDecimal) aValue);
break;
case NUMPROVISAO:
correio.setNumProvisao((int) aValue);
break;
case VALORPROVISAO:
correio.setValorProvisao((BigDecimal) aValue);
break;
default:
// Não deve ocorrer, pois só existem 9 colunas
throw new IndexOutOfBoundsException("columnIndex out of bounds");
}
fireTableCellUpdated(rowIndex, columnIndex); // Notifica a atualização da célula
}
// Retorna referente a linha especificada
public Correio getLinhas(int indiceLinha)
{
return linhas.get(indiceLinha);
}
}[/code]
Populando a tabela:
private List<Correio> criaTabela() throws Throwable
{
List<Correio> tabela = new ArrayList<Correio>();
dao.Conector con = new Conector();
Statement st = con.conectar().createStatement();
String sql="";//AQUI É O MEU SELECT DO BD
ResultSet rs = st.executeQuery(sql);
while(rs.next())
{
Correio linha = new Correio();
linha.setSelecionado(false);
linha.setTransportadora(rs.getString("Transportadora"));
linha.setBase(rs.getString("Base"));
linha.setContrato(rs.getString("Contrato"));
linha.setLote(rs.getString("Lote"));
linha.setNF(rs.getInt("NF"));
linha.setValor(rs.getBigDecimal("valorNF"));
linha.setNumProvisao(rs.getInt("Num_Provisao"));
linha.setValorProvisao(rs.getBigDecimal("Valor_Provisao"));
tabela.add(linha);
}
return tabela;
}
Para testar o valor que retorna do checkbox estou fazendo:
System.out.println(tblNFs.getValueAt(0,0));
o checkbox marcado retorna false e desmarcado também, alguem sabe onde está o erro?.