Java JTable对顶部的空单元格进行升序排序
当我单击列标题以升序排序时,如何使JTable中的空单元格显示在具有值的单元格下方。现在,空单元格显示在单元格上方,其中包含数字1和2Java JTable对顶部的空单元格进行升序排序,java,swing,sorting,jtable,Java,Swing,Sorting,Jtable,当我单击列标题以升序排序时,如何使JTable中的空单元格显示在具有值的单元格下方。现在,空单元格显示在单元格上方,其中包含数字1和2 TableRowSorter<TableModel> tableRowSorter = new TableRowSorter<TableModel>(spreadsheetModel) { Comparator<Object> comparator = new Comparator<Object>()
TableRowSorter<TableModel> tableRowSorter = new TableRowSorter<TableModel>(spreadsheetModel)
{
Comparator<Object> comparator = new Comparator<Object>()
{
public int compare(Object o1, Object o2)
{
try
{
Double d1 = Double.parseDouble(o1.toString());
Double d2 = Double.parseDouble(o2.toString());
return d1.compareTo(d2);
}
catch (NumberFormatException numberFormatException)
{
try
{
Integer i1 = Integer.parseInt(o1.toString());
Integer i2 = Integer.parseInt(o2.toString());
return i1.compareTo(i2);
}
catch (Exception e)
{
return o1.toString().compareTo(o2.toString());
}
}
}
};
public Comparator getComparator(int column)
{
return comparator;
};
};
for(int i = 0; i < table.getColumnCount(); i++)
tableRowSorter.setComparator(i, tableRowSorter.getComparator(i));
tableRowSorter.setSortKeys(null);
table.setRowSorter(tableRowSorter);
table.setAutoCreateRowSorter(false);
TableRowSorter TableRowSorter=新的TableRowSorter(电子表格型号)
{
比较器比较器=新比较器()
{
公共整数比较(对象o1、对象o2)
{
尝试
{
Double d1=Double.parseDouble(o1.toString());
Double d2=Double.parseDouble(o2.toString());
返回d1。比较(d2);
}
捕获(NumberFormatException NumberFormatException)
{
尝试
{
整数i1=Integer.parseInt(o1.toString());
整数i2=Integer.parseInt(o2.toString());
返回i1。比较(i2);
}
捕获(例外e)
{
返回o1.toString().compareTo(o2.toString());
}
}
}
};
公共比较器getComparator(int列)
{
返回比较器;
};
};
对于(int i=0;i
在进行比较之前,您可以检查空值。比如:
// Handle sorting of null values
if (o1 == null && o2 == null) return 0;
if (o1 == null) return 1;
if (o2 == null) return -1;
在比较之前,我尝试将其添加到比较器中,但空单元格仍然显示在顶部。比较器看不到空值。@stevetronix,请发布您的演示。