JTable的通用单元格渲染器
问题描述:
我想制作一个JTable单元格渲染器,它将能够识别数据类型并使用适当的表示形式。JTable的通用单元格渲染器
更具体一点,我希望我的表能够识别数据类型是否为集合,并且在这种情况下使用JComboBox进行表示(在其他情况下为标准表示形式:JCheckBox用于布尔类型和JLabel用于其他类型和用于我正在使用自定义模型的方法getColumnClass()
)
我不知道事先的数据类型,在哪个列将被收集,甚至是会有收集,所以我不能使用标准的方式的
JComboBox cell renderer TableColumn column = table.getColumnModel().getColumn(1);
或类似的,我很熟悉用。
请帮助:)
答
您可以使用内部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