我正在尝试通过扩展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)。
请............帮助...... 提前谢谢
哈桑
答案 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 来解决问题