JTable的通用单元格渲染器

时间:2015-10-15 20:27:43

标签: java swing jtable tablecellrenderer

我想制作一个JTable单元格渲染器,它能够识别一种数据并使用适当的表示。

更具体地说,我希望我的表能够识别数据类型是否为Collection,并且在这种情况下使用JComboBox进行表示(在其他情况下是标准表示:JCheckBox用于布尔类型,JLabel用于其他类型和用于表示我正在使用自定义模型的方法getColumnClass()

我事先不知道数据的类型,在哪个列中将是Collection,甚至是否会有Collection,所以我不能使用标准的方式

JComboBox cell renderer TableColumn column = table.getColumnModel().getColumn(1);

或类似我熟悉的。

请帮助:)

1 个答案:

答案 0 :(得分:0)

您可以在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);
    }
};