Pessoal,
Estou desenvolvendo um aplicativo em que tem uma opção de "Pesquisar Pessoa", que mostra em um JTable o resultado da busca ao Banco com os Dados: Código, Nome e Foto. Porém não estou conseguindo colocar a foto de cada pessoa na célula correspondente aos seus dados, mas somente na coluna toda!
O código que uso para inserir os dados e a foto é o seguinte (porém está colocando a foto do último registro buscado para todas as linhas coluna FOTO):
DefaultTableModel modelo = (DefaultTableModel) tabelaPesquisa.getModel();
modelo.setNumRows(0); // zera os dados da tabela caso haja
try {
while (rs.next()) {
// insere uma nova linha com os dados Código e Nome (o campo Foto vai estar vazio)
modelo.addRow(new Object[] {
rs.getInt("CodPessoa"),
rs.getString("Nome"),
});
// pegando a foto do registro:
SerialBlob blob = new SerialBlob(rs.getBlob("Foto"));
BufferedInputStream bInputStream = new BufferedInputStream(blob.getBinaryStream());
byte[] dados = null;
ImageIcon foto = null;
try {
dados = new byte[bInputStream.available()];
bInputStream.read(dados, 0, dados.length);
foto = new ImageIcon(dados); // cria a imagem
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
// Setanto a foto na 3ª coluna da JTable
TableColumnModel columnModel = tabelaPesquisa.getColumnModel();
JTableRenderer rendererImagem = new JTableRenderer(foto); // classe JTableRenderer está abaixo
columnModel.getColumn(2). setCellRenderer(rendererImagem);
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
// classe interna necessária para inserir as imagens nas células
private final class JTableRenderer extends DefaultTableCellRenderer {
ImageIcon imagem = null;
public JTableRenderer(ImageIcon imagem){
this.imagem = imagem;
setValue(imagem);
}
@Override
protected void setValue(Object value) {
if (value instanceof ImageIcon) {
if (value != null) {
ImageIcon d = (ImageIcon) value;
setIcon(d);
} else {
setText("");
setIcon(null);
}
} else {
super.setValue(value);
}
}
}

