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 已经是最小的负整数,你进一步尝试从中减去一些东西?