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

时间:2011-11-22 15:20:42

标签: java swing jtable

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

 public Class getColumnClass(int c) {     

  return getValueAt(0, c).getClass();
}

如果该表格单元格中没有NULL,则完全正常。 所以我按照以下方式对其进行了修改:

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

现在,再次,如果列中至少有一个非NULL空格,则它可以正常工作。 但是如果列中的所有单元格都是NULL,则它不起作用('casue它返回nullPointerException)。

请............帮助...... 提前谢谢

哈桑

5 个答案:

答案 0 :(得分:6)

您是否知道您希望每个列预先包含哪种类型?

如果是这样,那么你可以用类对象构建一个数组,然后返回适当的数组。

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

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

答案 1 :(得分:3)

这是我使用的一般代码:

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

答案 2 :(得分:0)

选择'默认'类型。 return String.class;是安全的解决方案。

答案 3 :(得分:0)

解决这个问题非常简单。看看我做的代码更改。此代码已经过测试且没有错误

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

答案 4 :(得分:-1)

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 String.class;
}

如果列中的所有单元格都为NULL,则返回 String.class 来解决问题