JTable排序器对整数和双精度排序不正确

时间:2018-10-22 18:11:39

标签: java swing jtable tablerowsorter

我的问题是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;
      }
  }
})

1 个答案:

答案 0 :(得分:1)

这只是为了纠正您执行compare方法的情况,

代替您当前的方法,

  @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类的compare方法,就像这样。简单,安全且易于管理。

  @Override
  public int compare(Integer o1, Integer o2) {
      return Integer.compare(o1, o2);
  }

这样,如果尝试执行len1-len2之类的操作,它将不会让您遇到整数溢出的情况。想象一下,如果len1已经是最低的负整数,并且您进一步尝试从中减去某物?