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

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

//前面是数据库连接,实现方法都大同小异,主要看下图片部分吧^-^
//这里的data是:Vector<Vector<Object>> data =  new Vector<Vector<Object>>();
while(result !=null && result.next()) {
					//Object view [] = new Object[14];
					Vector<Object> v = new Vector<Object>();
					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<data.size();i++){		
			tableModel.addRow(data.get(i));
		}
		this.table=new JTable(tableModel);
		table.getColumnModel().getColumn(3).setCellRenderer(new ImageRenderer());//渲染图片
		this.table.setRowHeight(50);

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

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值