Java JTable+;如果单元格包含null,则getColumnClass()返回null
我试图通过扩展DefaultTableModel并覆盖getColumnClass()对JTable进行排序,如下所示: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
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();
}