您可以使用内部JTable中DefaultRendering机制,再利用这一机制适用于每个细胞:
tableView.setDefaultRenderer(TitleViewCell.class, new TitleTableCellRenderer.class());
tableView.setDefaultRenderer(DataViewCell.class, new DataTableCellRenderer.class());
在这里你也可以继承一个JTable到例如JTableView:
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;
public class JTableView extends JTable
{
private static final long serialVersionUID = -1350656893711208356L;
public JTableView(TableModel tableModel)
{
super(tableModel);
}
public TableCellRenderer getCellRenderer(int row, int column)
{
Object value = getValueAt(row, column);
if (value != null)
{
return getDefaultRenderer(value.getClass());
}
return super.getCellRenderer(row, column);
}
};
*“更具体地说,我希望我的表能够识别数据类型是否为集合,并且在这种情况下使用JComboBox进行表示(在其他情况下,标准表示ation:JCheckBox用于布尔类型,JLabel用于其他类型,为此我使用自定义模型的方法'getColumnClass()')*“ - 这听起来更像TableCellEditor的功能。 TableModel的getColumnClass方法的目的是允许它从JTable的可用注册表中查找渲染器/编辑器。 – MadProgrammer