【2】Java读取mysql中图片,并显示在JTable中

我的思路是有些麻烦,但我这个小菜鸡能弄出来已经很开心啦!记录一下吧,嘻嘻嘻……
**思路:**读取数据库中图片Blob流,保存至本地,这样图片就会存在于本地文件中,再通过读取本地图片路径,重写getTableCellRendererComponent方法,渲染图片后显示在表格中。
注意的点:Vector和Object的使用要注意一下,我用的是Vector类型。看代码体会下吧。
(1)mysql类

//前面是数据库连接,实现方法都大同小异,主要看下图片部分吧^-^
//这里的data是:Vector> data =  new Vector>();
while(result !=null && result.next()) {
					//Object view [] = new Object[14];
					Vector v = new Vector();
					String man_id=result.getString(1);
					int com_id=result.getInt(2);//返回的参数是man_id,commodities.id, name, photo, cur_price,raw_price, discount, category, material, color, size, brand, mading_area,sale_volume
					String name=result.getString(3);
					
					Blob photo=result.getBlob(4);//读取数据库中图片的Blob流
					
					InputStream in = photo.getBinaryStream();
					String pic = "./"+k+".jpg";//为图片设置不同的地址				
					FileOutputStream out = new FileOutputStream(pic);
					byte[] buffer = new byte[1024];
					int len = 0;
					while((len = in.read(buffer))!=-1) {//将图片写入本地硬盘中
						out.write(buffer,0,len);
					}
					k++;
					out.close();
					in.close();
					System.out.print("pic"+pic);//测试
					
					ImageIcon icon = new ImageIcon(pic);
					icon.setImage(icon.getImage().getScaledInstance(40,40,Image.SCALE_DEFAULT));//设置图片在JTable中的大小
					Image  img = icon.getImage();
					
					float cur_price=result.getFloat(5);
					float raw_price=result.getFloat(6);
					float discount=result.getFloat(7);
					String category=result.getString(8);
					String material=result.getString(9);
					String color=result.getString(10);
					String size=result.getString(11);
					String brand=result.getString(12);
					String area=result.getString(13);
					int sale_volume=result.getInt(14);
				
					v.add(man_id);
					v.add(com_id);
					v.add(name);
					v.add(img);
					v.add(cur_price);
					v.add(raw_price);
					v.add(discount);
					v.add(category);
					v.add(material);
					v.add(color);
					v.add(size);
					v.add(brand);
					v.add(area);
					v.add(sale_volume);
					data.add(v);
				}
 
  

(2)图片渲染类

package softwork;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Image;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

public class ImageRenderer implements TableCellRenderer
{

	  @SuppressWarnings("unchecked")
	  @Override
	  public Component getTableCellRendererComponent(
	          JTable table, Object value, boolean isSelected, 
	          boolean hasFocus, int rowIndex, int columnIndex) {
	    
	    if( value instanceof Image ){
	    	JLabel jLabel = new JLabel();
	    	jLabel.setLayout(new BorderLayout());//设置布局
	    	jLabel.setIcon(new ImageIcon((Image)value));//给jlable设置图片
	      return jLabel;
	    }
	    
	    else if( value instanceof File ) {
	      try {
	        return new JLabel(new ImageIcon(ImageIO.read((File)value)));
	      } catch(IOException ex) {
	        throw new RuntimeException(ex.getMessage(), ex);
	      }
	    }
	    
	    else {
	      String val = String.valueOf(value);
	      try {
	        return new JLabel(new ImageIcon(ImageIO.read(new File(val))));
	      } catch(IOException ex) {
	        throw new RuntimeException(ex.getMessage(), ex);
	      }
	    }
	  }
	}

(3)用户界面类

//前面是界面设计,这里主要是图片显示在每行的第4列单元格中。
//注意getColumn(n)中n要与图片位置相对应,getColumn()是从0开始滴!
for(int i=0;i

(4)效果
啦啦啦
PS:希望大佬们多指教指教^ - ^ ~

你可能感兴趣的:(【2】Java读取mysql中图片,并显示在JTable中)