在JTable的单列上显示来自MySQL数据库的图像
我正在尝试显示从blob数据类型的MySQL数据库检索的图像。无法找出是什么原因导致图像列显示这样的数据[B@29b8e4f7
而不是图像图标。
DefaultTableModel model = new DefaultTableModel(new Object[]{
"image", "item_name", "quantity","price", "category", "color", "size"}, 0){
@Override
public Class<?> getColumnClass(int column) {
switch(column){
case 0: return ImageIcon.class;
default: return String.class;
}
}
};
myTable.setModel(model);
…
ResultSet rs = database.getRS();
int columns = rs.getMetaData().getColumnCount();
while(rs.next()){
Object[] row = new Object[columns];
for(int i = 1; i <= columns; i++){
row[i-1] = rs.getObject(i);
}
DefaultTableModel defmodel = (DefaultTableModel) tableItem.getModel();
defmodel.insertRow(rs.getRow()-1, row);
}
-
由于您曾经
preparedstatement.setBlob(1, InputStream);
存储图像,因此我必须假定您存储的是物理图像文件/格式,而不仅仅是像素数据。您需要回读此图像格式并将其转换为Swing / Java支持的图像格式。
首先获取
Blob
对数据库字段的引用…Blob blob = rs.getBlob(1);
一旦有了
Blob
,就可以使用它的二进制文件InputStream
并读取数据…BufferedImage image = null; try (InputStream is = blob.getBinaryStream()) { image = ImageIO.read(is); } catch (IOException exp) { exp.printStackTrace(); }
现在,你可以把它的
ImageIcon
使用new ImageIcon(image)
和您的表格模型中把这个…