JTable сортировщик неправильная сортировка по целому и двойному - PullRequest
0 голосов
/ 22 октября 2018

Моя проблема в том, что 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 голосов
/ 22 октября 2018

Это просто для того, чтобы исправить вашу реализацию метода сравнения,

Вместо вашего текущего метода,

  @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, например, так.Легко, безопасно и управляемо.

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

Таким образом, вы не сможете столкнуться с целочисленными переполнениями, если попытаетесь сделать что-то вроде len1-len2.Представьте, что в len1 уже есть наименьшее отрицательное целое число, и вы пытаетесь что-то еще вычесть из него?

...