2014-05-09 77 views
0

我有一個JTable,像這樣創建的模型:添加一個JButton向JTable細胞

DefaultTableModel model = new DefaultTableModel(new Object[][] {},new String[] {"Col1", "Col2", "Col3", "Col4", "Col5", "Col6", "Col7", "Col8"}) { 
@Override 
public Class<?> getColumnClass(int column) { 
switch (column) { 
case 0: return ImageIcon.class; 
case 7: return JButton.class; 
default: return String.class; 
} 
} 
}; 
table = new JTable(model); 

但是,當我使用addRow方法,我ImageIcon正常,但沒有出現JButton。事實上,我得到了像javax.Swing.JButt...而不是JButton

回答

2

當您添加新行時,它正在正確填充。 (您可以看到ImageIcon)。 因此,JButton對象也被正確插入。

這裏唯一的區別是,JTable不知道如何顯示它或處理事件。

這就是爲什麼JTableJButton上調用toString()方法並顯示文本(如您所述)。

javax.swing.JButt ......


爲了克服這個問題,我們需要提供兩個額外的對象爲JTable

  1. TableCellEditor來處理事件。
  2. TableCellRenderer來處理繪畫。

您可以找到有關實施細節在這裏的附加信息:How to use custom JTable cell editor and cell renderer

希望這有助於。
祝你好運。


編輯迴應評論。

table.getColumnModel().getColumn(7).setCellRenderer(new MyCellRenderer()); 
// Put painting logic in MyCellRenderer class. 

這樣,您可以將不同的渲染器對象分配給不同的列。

+0

好的,我現在明白了這個問題。但我想知道如何讓JTable知道在特定的列中我想要JButton objets? – Simo03

+0

請檢查編輯。 –