您可以使用內部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