将JButton添加到JTable单元

时间:2014-05-09 11:47:03

标签: java swing 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 个答案:

答案 0 :(得分:2)

添加新行时,正在正确填充。 (你可以看到ImageIcon)。 因此,JButton对象也正在正确插入。

这里唯一的区别是,JTable不知道如何显示它或处理事件。

这就是JTabletoString()上调用JButton方法并显示文字(如您所述)的原因。

  

javax.swing.JButt ......


要解决此问题,我们需要向JTable提供另外两个对象。

  1. TableCellEditor处理事件。
  2. TableCellRenderer处理绘画。

  3. 您可以在此处找到有关实施详细信息的其他信息:How to use custom JTable cell editor and cell renderer

    希望这有帮助。
    祝你好运。


    编辑以回复评论。

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

    这样,您可以将不同的渲染器对象分配给不同的列。

答案 1 :(得分:1)

问题是JTable不支持按钮渲染器或编辑器。您可以使用自定义单元格编辑器ButtonColumnhttp://tips4java.wordpress.com/2009/07/12/table-button-column/

来克服它