2014-03-07 110 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