Olá, galera.
Sou novo no Forum e iniciante em Java.
Estou desenvolvendo um aplicativo pelo NetBeans e usando um DB MySQL para armazenar meus dados.
Uma das entidades possui um campo Blob, que armazeno um ícone simples, pequeno. Inseri todos os dados na tabela pelo próprio MySQL
e quero exibí-los em uma JTable na minha aplicação, porém quando faço a leitura da tabela no DB, a imagem não aparece, deixando apenas uma lista de caracteres (a figura abaixo mostra o resultado).
Já li vários tópicos com problemas parecidos, alguns até solucionados, porém tentei fazer adaptações no meu código e nenhuma delas deu resultado.
Um tópico que apresentava um problema parecido foi ESTE , mas tentei adaptar todos os códigos que ele disponibilizou na solução e mesmo assim (não se se por “cabacice” minha ou se porque realmente algo está MUITO errado) não tive sucesso em nenhuma delas.
Como tem muita gente aqui no Forum que realmente manja da arte, vou postar o que tenho de código (mesmo errado) até agora: ImageFormatter.java
package controle;
import com.towel.bean.Formatter;
import javax.swing.ImageIcon;
/**
* Esta classe é responsável pelas decodificações das imagens a serem manipuladas.
*
* @author Xuxão
* 11/02/2014
*/
public class ImageFormatter implements Formatter{
/**
* Converte o objeto passado como parâmetro em um vetor de bytes,
* transformando a sequência de bytes em um novo objeto ImageIcon
* @param o
* @return ImageIcon
*/
@Override
public ImageIcon format(Object o) {
byte[] imageInByte = (byte[])o;
return new ImageIcon(imageInByte);
}
/**
* Analisa o objeto passado como parâmetro e devolve um objeto ImageIcon
* @param o
* @return ImageIcon
*/
@Override
public ImageIcon parse(Object o) {
byte[] imageInByte = (byte[]) o;
return new ImageIcon(imageInByte);
}
@Override
public String getName() {
return "ImageFormatter";
}
}
Traz as equipes separadas por grupos na primeira fase e, após
a fase classificatória, preenche automaticamente cada fase, conforme
os resultados dos jogos consequentes.
@author Xuxão
05/02/2014 /
public class TelaTabela extends javax.swing.JFrame {
// instancia-se um objeto ConectaBD para o preenchimento das tabelas
ConectaBD conectaTime = new ConectaBD();
// instancia-se um objeto ModeloTime:
ModeloTime time = new ModeloTime();
/*
Creates new form TelaTabela
*/
public TelaTabela(){
initComponents();
preencherTabelaGrupos(“SELECT * FROM time WHERE grupo = ‘A’ ORDER BY p DESC”, tabelaTimesA1);
}
…
}//
/**************** PREENCHIMENTO DAS TABELAS DE GRUPOS *********************/
// o método recebe um comando SQL e o nome de uma tabela como parâmetros:
public void preencherTabelaGrupos(String SQL, JTable tabela){
// instancia-se uma nova ArrayList
ArrayList dados = new ArrayList();
// instancia-se uma nova lista de colunas:
String[] Colunas = new String[]{“PAÍS”,“P”,“V”,“E”,“D”,“GP”,“GC”,“SG”};
try {// conecta o DB:
conectaTime.conectar();
// passa o comando SQL usado como parâmetro:
conectaTime.executarSQL(SQL);
// posiciona no primeiro registro:
conectaTime.mostraResultado.first();
do{// para cada registro encontrado:
// instancia-se um objeto Blob:
Blob imgBlob = conectaTime.mostraResultado.getBlob("bandeira");
// preenche as linhas com os dados:
dados.add(new Object[]{
// conectaTime.mostraResultado.getBlob("bandeira")+" "+
conectaTime.mostraResultado.getString("nomePais"),
conectaTime.mostraResultado.getInt("p"),
conectaTime.mostraResultado.getInt("v"),
conectaTime.mostraResultado.getInt("e"),
conectaTime.mostraResultado.getInt("d"),
conectaTime.mostraResultado.getInt("gP"),
conectaTime.mostraResultado.getInt("gC"),
conectaTime.mostraResultado.getInt("sG")});
}while(conectaTime.mostraResultado.next()); // enquanto existir registros
} catch (SQLException ex) {
JOptionPane.showMessageDialog(rootPane, "Falha ao carregar dados.\nErro: "+ex.getMessage());
}
// instancia-se um objeto ModeloTabelas...
ModeloTabelas modelo = new ModeloTabelas(dados, Colunas);
// e incorpora-se o modelo na tabela do formulário
tabela.setModel(modelo);
// determina-se o tamanho (em pixels) e o redimensionamento de cada uma das colunas:
// coluna do nome e da bandeira da seleção:
tabela.getColumnModel().getColumn(0).setPreferredWidth(230);
tabela.getColumnModel().getColumn(0).setResizable(false); // não se altera o tamanho
// coluna dos pontos:
tabela.getColumnModel().getColumn(1).setPreferredWidth(30);
tabela.getColumnModel().getColumn(1).setResizable(false); // não se altera o tamanho
// coluna das vitórias:
tabela.getColumnModel().getColumn(2).setPreferredWidth(30);
tabela.getColumnModel().getColumn(2).setResizable(false); // não se altera o tamanho
// coluna dos empates:
tabela.getColumnModel().getColumn(3).setPreferredWidth(30);
tabela.getColumnModel().getColumn(3).setResizable(false); // não se altera o tamanho
// coluna das derrotas:
tabela.getColumnModel().getColumn(4).setPreferredWidth(30);
tabela.getColumnModel().getColumn(4).setResizable(false); // não se altera o tamanho
// coluna dos gols Pró:
tabela.getColumnModel().getColumn(5).setPreferredWidth(30);
tabela.getColumnModel().getColumn(5).setResizable(false); // não se altera o tamanho
// coluna dos gols Contra:
tabela.getColumnModel().getColumn(6).setPreferredWidth(30);
tabela.getColumnModel().getColumn(6).setResizable(false); // não se altera o tamanho
// coluna do saldo de Gols:
tabela.getColumnModel().getColumn(7).setPreferredWidth(30);
tabela.getColumnModel().getColumn(7).setResizable(false); // não se altera o tamanho
// determina a localização da tabela no formulário:
tabela.getTableHeader().setReorderingAllowed(false); // não pode mudar de lugar
// determina o redimensionamento da tabela como um todo
tabela.setAutoResizeMode(tabela.AUTO_RESIZE_OFF); // não pode redimensionar a tabela
// permite a seleção de um único elemento da tabela
tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
conectaTime.desconectar();
}
/**
@param args the command line arguments
*/
public static void main(String args[]) {
…
}
});
}
…
// End of variables declaration
}[/code]
Não sei se fui claro, mas espero que alguém consiga entender e me ajudar.
Abraços.