2014-03-07 113 views
0

我想添加一个图像,在我的数据库中的一列JTable 与一个数字和一个代码特别这张图片问题是我得到的数字和代码,但图像不显示我不知道为什么这里是我的代码添加图像从数据库到JTable

String sql="SELECT id,chiffre,image FROM symbolique WHERE id BETWEEN 200 and 205"; 
try{ 
    st=connexion.prepareStatement(sql); 
    res=st.executeQuery(); 
    while(res.next()){ 
     int j=0; 
     String [] code= new String[1000]; 
     String [] chiffre1=new String[100]; 
     code [j] = res.getString("id"); 
     chiffre1[j] = Integer.toString(res.getInt("chiffre")); 
     Blob blob = res.getBlob("image"); 
     is2 = new BufferedInputStream(blob.getBinaryStream()); 
     Image raw = ImageIO.read(is2); 
     ImageIcon icon =new ImageIcon(raw); 
     Object [][] data = new Object[200][100]; 
     data[j][1]= code [j]; 
     data[j][2]= chiffre1[j]; 
     data[j][3]=icon; 
     j++; 
     String title[] = {"image", "chiffre","code"}; 
     DefaultTableModel model = new DefaultTableModel(data, title); 
     table.setModel(model); 
    } 
}catch(Exception e){ 
    JOptionPane.showMessageDialog(null, e);} 
} 

回答

2
  • Icon/ImageIconJTable更好地TableModel直接

  • 你必须覆盖getColumnClassIcon/ImageIcon in XxxTableModel for showing this Object as the image in the JTables view

  • for detailed informations(incl。工作代码示例)读取Oracle官方教程 - How to use Tables

+0

我不明白如何做到这一点:把图标/ ImageIcon JTable更好地直接对TableModel – user3387809

+0

[例如](http://stackoverflow.com/a/7051005/714968) – mKorbel

1

这不会有助于解决形象问题,但现在你的代码重新创建的TableModel在ResultSet中的每一行,这意味着你将只看到一个数据行。

  1. 既然你有循环代码,你需要在循环开始之前创建一个空的DefaultTableModel。
  2. 在循环内部,使用addRow(...)方法为ResultSet中的每一行添加另一行数据到TableModel中
  3. 当您完成循环时,您将使用该模型创建JTable。

您是否添加了任何调试代码?您是否尝试显示图像的宽度/高度以确认您正在正确读取图像?为什么不做一个简单的测试,因为使用JTable比使用JLabel更复杂,所以首先尝试在JLabel中读取和显示图像。然后,一旦你得到这个工作,你可以将知识应用于使用JTable。

+0

是的,我试过了JLabel和它正常工作,我可以看到我的形象,但与JTable它不起作用,我不知道为什么?我必须使用JTable,因为我想获取与图像相对应的数字和代码 – user3387809