java在JTable中对双值进行排序
我发现了很多与此相关的问题,但我还没有找到一个简单的解决方案
我找不到一种方法使我的JTable sort正确地加倍
我扩展了AbstractTableModel以接收一个类数组,并返回每列的正确类型:
class TableModelMod extends AbstractTableModel{
private ArrayList data;
private String [] headers;
private Class [] types;
TableModelMod(String [] heads, ArrayList datas, Class [] classes){
headers = heads;
data = datas;
types = classes;
}
...
@Override public Class getColumnClass(int c){
if (c > types.length - 1)
return null;
else
return types[c];
}
...
然后在我的自定义JTable构造函数中:
TableRowSorter<TableModelMod> sorter = new TableRowSorter<TableModelMod>((TableModelMod)getModel());
但在添加行时,我会出现以下错误:
java.lang.IllegalArgumentException: Cannot format given Object as a Number
它在方法DecimalFormat.format(Object number, StringBuffer toAppendTo, FieldPosition pos)
中失败,该方法接受大多数数字类型,但不接受双精度
如果我对双栏使用另一个类,我不会得到任何错误,但排序仍然不能按预期工作。我尝试了不同的数字类,但似乎没有一个能正确地对double进行排序:
@Override public Class getColumnClass(int c){
if (c > types.length - 1)
return null;
else if (types[c] == Double.class)
return Number.class;
else
return types[c];
}
我不确定我需要的是实现一个自定义行排序器、一个自定义CellRenderer,还是两者兼而有之
有人能指导我如何用更简单的方法解决这个问题吗
非常感谢并致以最良好的问候
编辑:已解决
很难说问题出在哪里
包含Object[]行的ArrayList是使用getString(int)而不是getObject(int)或getDouble(int)从数据库结果集填充的,因此渲染器无法将该值用作Double。奇怪的是,它没有给出使用Integer或Number作为列类的异常,但它被排序为字符串。我在错误的类中寻找问题,因为我确信我的ArrayList只包含对象
非常感谢你的例子,看着它们,我注意到我的双打实际上是弦,然后我可以找到转换发生的地方
# 1 楼答案
看看这个代码。它对双重值进行排序
我对link给出的源代码进行了一点修改,使其采用双值
# 2 楼答案
这段代码可能是你的SSCCE,你能说明你对这段代码的看法吗,你发布的代码中没有任何内容