2011-06-30 21 views
-1

我試圖將圖像添加到JTable中的列,但填充列時它們顯示爲空白。JTable中的圖像爲空

我重寫了getColumnClass。這裏是表格聲明...

laneTable.setModel(new javax.swing.table.DefaultTableModel(
     new Object [][] { 
      {null, null, null, null, null, null}, 
      {null, null, null, null, null, null}, 
      {null, null, null, null, null, null}, 
      {null, null, null, null, null, null} 
     }, 
     new String [] { 
      "Lane ID", "Status", "Traffic", "Gate Arm", "Lane Indicator", "Temperature" 
     } 
    ) { 
     Class[] types = new Class [] { 
      java.lang.String.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class 
     }; 

     @Override 
     public Class getColumnClass(int column) 
     { 

      if (column == 4) 
      { 

       return ImageIcon.class; 
      } 
      return Object.class; 
      // other code; default to Object.class 
     } 


    }); 

很明顯,第4列是我的列,圖像要顯示。我填充我的表...

for(int i = 0; i < 200; i++){ 
    ImageIcon icon = new ImageIcon("Images/test.jpg"); 
    laneTable.getModel().setValueAt(icon,i,4); 
} 

的路徑,以我的圖片是/src/Images/test.jpg的情況下,我的路徑是不正確莫名其妙... 我一直處理這個最後一週我無法弄清楚爲什麼這些圖像在我的桌子上一直顯示空白。

想法?

編輯這裏是我猜測的是一個SSCCE。不知道是否會工作或不..

import javax.swing.table.DefaultTableModel; 
import javax.swing.*; 

import java.awt.event.*; 
import java.awt.*; 

public class LaneGUI extends javax.swing.JApplet implements Runnable { 
    private Connection connection; 
private XMLParser xmlParser; 
private laneData laneData; 
private SiteData siteData; 
private Thread connectionThread; 


public void init() {   


    try { 
     java.awt.EventQueue.invokeAndWait(new Runnable() { 

      public void run() {      
       initComponents();     
       ImageIcon icon = new ImageIcon("Images/test.jpg"); 

       for(int i = 0; i < 200; i++){ 
      laneTable.getModel().setValueAt(icon,i,4); 
      } 

     }); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 


} 


/** This method is called from within the init() method to 
* initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is 
* always regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 




// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 


    jScrollPane1 = new javax.swing.JScrollPane(); 
    laneTable = new javax.swing.JTable(); 



    laneTable.setModel(new javax.swing.table.DefaultTableModel(
     new Object [][] { 
      {null, null, null, null, null, null}, 
      {null, null, null, null, null, null}, 
      {null, null, null, null, null, null}, 
      {null, null, null, null, null, null} 
     }, 
     new String [] { 
      "Lane ID", "Status", "Traffic", "Gate Arm", "Lane Indicator", "Temperature" 
     } 
    ) { 
     Class[] types = new Class [] { 
      java.lang.String.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class 
     }; 

     @Override 
     public Class getColumnClass(int column) 
     { 

      if (column == 4) 
      { 

       return ImageIcon.class; 
      } 
      return Object.class; 
      // other code; default to Object.class 
     } 


    }); 
    laneTable.setRowHeight(100); 
    jScrollPane1.setViewportView(laneTable); 

    }); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(18, 18, 18) 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)  
      .addContainerGap()) 
    ); 

}// </editor-fold>       







// Variables declaration - do not modify      

private javax.swing.JScrollPane jScrollPane1; 
private javax.swing.JTable laneTable; 
// End of variables declaration     
} 

編輯在新標籤測試圖像時,圖像顯示正確的標籤內,但仍然是表內的空白。

+1

沒有足夠的信息能夠看到正在發生的事情。也許你可以創建一個簡單的例子來重現問題? –

+0

如果你可以發佈一個SSCCE,或者至少把你的getValueAt,setValueAt方法實現。 – Heisenbug

+0

呃,也許這是我的問題..這是我必須實現我想要的所有代碼。我錯過了什麼?我宣佈圖像圖標,然後將該值設置到表格中。而且我重寫了getcolumnclass以返回包含圖像圖標的列的image.class。剩下什麼? – JMD

回答

1

空白圖像可能不是路徑問題,而是渲染問題。看看你的CellRenderer的那一欄。它使用默認的渲染器還是你在做特別的事情?

試着打印出路徑以確保它進入單元格。也請嘗試訪問JTable以外的路徑,以確保沒有任何路徑問題。

+0

我已經嘗試創建我自己的單元格渲染器,它沒有效果。 (雖然我沒有重寫我的專欄,然後要麼)圖像的路徑名打印如果我不覆蓋getcolumnclass – JMD

+1

@Jesse,你應該能夠使用默認,但我不知道如果你創建一個自定義一個,因爲你沒有提到你打算如何渲染細胞。嘗試在JLable中顯示JTable之外的項目或其他內容以驗證路徑和資源是否正確。 – jzd