JTable 排序器对整数和双精度的排序不正确
JTable sorter incorrect sorting on integer & double
我的问题是 TableRowSorter 对双精度和整数的排序不正确,我一直在搜索并尝试了下面列出的几乎所有解决方案。
-使用 getColumnClass()
-使用 setComparator()
@Override
public Class<?> getColumnClass(int column)
{
if (column == 4)
return Integer.class;
else
return String.class;
}
};
sorter.setComparator(4, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
int len1 = o1.toString().length();
int len2 = o2.toString().length();
if (len1==len2) {
return o1.compareTo(o2);
} else {
return len1-len2;
}
}
})
这只是为了纠正您对比较方法的实施,
代替您当前的方法,
@Override
public int compare(Integer o1, Integer o2) {
int len1 = o1.toString().length();
int len2 = o2.toString().length();
if (len1==len2) {
return o1.compareTo(o2);
} else {
return len1-len2;
}
}
你应该只使用 Integer class 的比较方法,就像这样。简单、安全且易于管理。
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1, o2);
}
这样,如果您尝试执行类似 len1-len2 的操作,它就不会让您 运行 陷入整数溢出的情况。想象一下,如果 len1 已经是最小的负整数,你进一步尝试从中减去一些东西?
我的问题是 TableRowSorter 对双精度和整数的排序不正确,我一直在搜索并尝试了下面列出的几乎所有解决方案。
-使用 getColumnClass()
-使用 setComparator()
@Override
public Class<?> getColumnClass(int column)
{
if (column == 4)
return Integer.class;
else
return String.class;
}
};
sorter.setComparator(4, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
int len1 = o1.toString().length();
int len2 = o2.toString().length();
if (len1==len2) {
return o1.compareTo(o2);
} else {
return len1-len2;
}
}
})
这只是为了纠正您对比较方法的实施,
代替您当前的方法,
@Override
public int compare(Integer o1, Integer o2) {
int len1 = o1.toString().length();
int len2 = o2.toString().length();
if (len1==len2) {
return o1.compareTo(o2);
} else {
return len1-len2;
}
}
你应该只使用 Integer class 的比较方法,就像这样。简单、安全且易于管理。
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1, o2);
}
这样,如果您尝试执行类似 len1-len2 的操作,它就不会让您 运行 陷入整数溢出的情况。想象一下,如果 len1 已经是最小的负整数,你进一步尝试从中减去一些东西?