猿问

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

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

      }

  }

})


慕田峪9158850
浏览 152回答 1
1回答

慕妹3146593

这只是为了纠正您对比较方法的实现,而不是你目前的方法,&nbsp; @Override&nbsp; public int compare(Integer o1, Integer o2) {&nbsp; &nbsp; &nbsp; int len1 = o1.toString().length();&nbsp; &nbsp; &nbsp; int len2 = o2.toString().length();&nbsp; &nbsp; &nbsp; if (len1==len2) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return o1.compareTo(o2);&nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return len1-len2;&nbsp; &nbsp; &nbsp; }&nbsp; }您应该像这样使用 Integer 类的 compare 方法。简单、安全且易于管理。&nbsp; @Override&nbsp; public int compare(Integer o1, Integer o2) {&nbsp; &nbsp; &nbsp; return Integer.compare(o1, o2);&nbsp; }这样,如果您尝试执行 len1-len2 之类的操作,它就不会让您遇到整数溢出情况。想象一下,如果 len1 已经是最小的负整数,并且您进一步尝试从中减去一些东西?
随时随地看视频慕课网APP

相关分类

Java
我要回答