2015-10-15 118 views
0

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

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

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

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

或类似的,我很熟悉用。

请帮助:)

+1

*“更具体地说,我希望我的表能够识别数据类型是否为集合,并且在这种情况下使用JComboBox进行表示(在其他情况下,标准表示ation:JCheckBox用于布尔类型,JLabel用于其他类型,为此我使用自定义模型的方法'getColumnClass()')*“ - 这听起来更像TableCellEditor的功能。 TableModel的getColumnClass方法的目的是允许它从JTable的可用注册表中查找渲染器/编辑器。 – MadProgrammer

回答

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); 
    } 
};