Java JTable+;如果单元格包含null,则getColumnClass()返回null

Java JTable+;如果单元格包含null,则getColumnClass()返回null,java,swing,jtable,Java,Swing,Jtable,我试图通过扩展DefaultTableModel并覆盖getColumnClass()对JTable进行排序,如下所示: public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); } 如果该表单元格中没有空值,它就可以正常工作。 因此,我用以下方式对其进行了修改: public Class getColumnClass(int c) { for(int rowIndex = 0

我试图通过扩展DefaultTableModel并覆盖getColumnClass()对JTable进行排序,如下所示:

 public Class getColumnClass(int c) {     

  return getValueAt(0, c).getClass();
}
如果该表单元格中没有空值,它就可以正常工作。 因此,我用以下方式对其进行了修改:

  public Class getColumnClass(int c) {


  for(int rowIndex = 0; rowIndex < data.size(); rowIndex++){

    Object[] row = data.get(rowIndex);

    if (row[c] != null) {
        return getValueAt(rowIndex, c).getClass();
    }
  }
  return getValueAt(0, c).getClass();
 }
公共类getColumnClass(int c){
对于(int rowIndex=0;rowIndex
现在,如果列中至少有一个单元格不是空的,那么它也可以正常工作。 但是如果列中的所有单元格都为NULL,则它不起作用('因为它返回nullPointerException)

请……帮助。。。。 提前谢谢


哈桑

您知道您希望每一列包含的类型吗

如果是这样,那么您可以使用类对象构建一个数组,并只返回相应的数组

Class[] columns = new Class[]{String.class, String.class, Date.class};

public Class getColumnClass(int c) {  
     return columns[c];
}

选择“默认”类型。返回字符串.class;这是一个相当安全的解决方案

这是我使用的通用代码:

    JTable table = new JTable(data, columnNames)
    {
        public Class getColumnClass(int column)
        {
            for (int row = 0; row < getRowCount(); row++)
            {
                Object o = getValueAt(row, column);

                if (o != null)
                {
                    return o.getClass();
                }
            }

            return Object.class;
        }
    };
JTable table=新的JTable(数据、列名)
{
公共类getColumnClass(int列)
{
对于(int row=0;row
公共类getColumnClass(int c)
{     
对于(int rowIndex=0;rowIndex

通过返回String.class修复了此问题。如果列中的所有单元格都为空

,则解决此问题非常简单。看看我所做的代码更改。此代码经过测试,没有错误

public Class getColumnClass(int c) {  
  int columnCount;
  // dataModel is an object of the data Model class(default or abstract)
  columnCount=dataModel.getRowCount();
    if(columnCount<=1){
       return String.class;
    }
    return getValueAt(0, c).getClass();
}
public类getColumnClass(intc){
int列计数;
//dataModel是数据模型类的对象(默认或抽象)
columnCount=dataModel.getRowCount();

如果我这样做(columnCountno,它并不比任何其他任意类型(对象除外)更“安全”,那么它就不会正确地对整数排序。公共类getColumnClass(int c){for(int rowIndex=0;rowIndexpublic Class getColumnClass(int c) { int columnCount; // dataModel is an object of the data Model class(default or abstract) columnCount=dataModel.getRowCount(); if(columnCount<=1){ return String.class; } return getValueAt(0, c).getClass(); }