2017-04-13 22 views
0

我試圖把一個圖標放在一個特定的列取決於一個條件,但所有得到的是圖像的鏈接。如何在填表時在jtable中設置圖標?

這是怎麼開始的表碼:

DefaultTableModel model = new DefaultTableModel() { 

    @Override 
    public boolean isCellEditable(int row, int column) { 
     return false; 
    } 

    @Override 
    public Class<?> getColumnClass(int column) { 
     switch (column) { 
      case 0: 
      case 1: 
       return Integer.class; 
      case 2: 
       return ImageIcon.class; 
      default: 
       return Object.class; 
     } 
    } 
}; 

然後根據不同的條件我填的表從我的數據庫(成品還沒有開始 - 和在建):

model.addColumn("Phases"); 
    model.addColumn("Date de début estimée(aaaa/mm/jj)"); 
    model.addColumn("Date de début réelle(aaaa/mm/jj)"); 
    model.addColumn("Date de fin estimée(aaaa/mm/jj)"); 
    model.addColumn("Date de fin réelle(aaaa/mm/jj)"); 
    model.addColumn("Status"); 
    model.addColumn("Tendance"); 

    ArrayList<String> name = new ArrayList<String>(); 
    ArrayList<String> last_name = new ArrayList<String>(); 

    String status = null; 
    String tendance = null; 
    byte[] Image = null; 

    // ImageIcon image2 = new ImageIcon("C:\\Users\\badr\\Documents\\NetBeansProjects\\UPLINE_GROUP\\src\\upline_group\\Ok-48.png"); 

    Date estimated_end_date = null; 
    Date real_end_date = null; 

    try { 
     String sql = "select * from task WHERE id_project='" + id_project1 + "' ORDER BY nom_task ASC"; 
     PST = conn.prepareStatement(sql); 
     RS = PST.executeQuery(); 

     while (RS.next()) { 
      try { 
       String sql2 = "select * from image "; 
       PST2 = conn2.prepareStatement(sql2); 
       RS2 = PST2.executeQuery(); 

       while (RS2.next()) { 

        if (RS.getString("real_start_date") == null && RS.getString("real_end_date") == null) { 
         status = "0(Non Démarrée)"; 
         //tendance = "0(Non Démarrée)"; 
         Image = RS2.getBytes("non"); 
        } 
        if (RS.getString("real_start_date") != null && RS.getString("real_end_date") == null) { 
         status = "1(en cours)"; 
         // tendance = "1(en cours)"; 
         Image = RS2.getBytes("cours"); 
        } 
        if (RS.getString("real_end_date") != null) { 
         status = "2(Terminé)"; 
         // tendance = "2(Terminé)"; 
         Image = RS2.getBytes("fini"); 
        } 

       } 
      } catch (Exception e) { 
       System.err.println(e); 
      } 

      estimated_end_date = RS.getDate("estimated_end_date"); 
      real_end_date = RS.getDate("real_end_date"); 
      model.addRow(new Object[]{RS.getString("nom_task"), RS.getDate("estimated_start_date"), RS.getDate("real_start_date"), estimated_end_date, real_end_date, status,Image}); 

     } 
    } catch (Exception e) { 
     System.err.println(e); 
    } 
    jTable1.setModel(model); 
+0

變量名稱不應以大寫字母開頭。 – camickr

回答

2

但所有得到的是圖像的鏈接:

然後,這意味着你是將文本存儲在該列中。

你有幾個,我可以看到的問題:

你的代碼試圖讀取圖像,但你需要一個ImageIcon存儲在TableModel。所以,你需要改變你的addRow(...)語句中使用:

addRow(..., new ImageIcon(image)); 

所以,你在你所希望顯示在表中的順序添加每個值。

當您修復上述語句時,它看起來像圖標將是addRow(...)語句的第6個參數。但是,根據您的getColumnClass(...)方法,圖標位於2列中。這對你來說不是很奇怪嗎?

+0

謝謝,我不知道我是如何錯過了!它現在正在工作! –