概要

JTableのカラムヘッダをクリックすることで、行表示を降順、昇順にソートします。以下のサンプルは、SortableTableExampleを参考にして作成しています。

サンプルコード

class SortableTableModel extends DefaultTableModel {
  public SortableTableModel(String[] str, int row) {
    super(str, row);
  }

  public void sortByColumn(int column, boolean isAscent) {
    Collections.sort(
      getDataVector(),
      new ColumnComparator(column, isAscent));
    fireTableDataChanged();
  }
}

class ColumnComparator implements Comparator<Object>, Serializable {
  private static final long serialVersionUID = 1L;
  protected final int index;
  protected final boolean ascending;

  protected ColumnComparator(int index, boolean ascending) {
    this.index = index;
    this.ascending = ascending;
  }

  @SuppressWarnings("unchecked")
  @Override public int compare(Object one, Object two) {
    if (one instanceof List && two instanceof List) {
      Comparable<Object> o1 =
        (Comparable<Object>) ((List<Object>) one).get(index);
      Comparable<Object> o2 =
        (Comparable<Object>) ((List<Object>) two).get(index);
      int c = Objects.compare(
          o1, o2, Comparator.nullsFirst(
            Comparator.<Comparable<Object>>naturalOrder()));
      return c * (ascending ? 1 : -1);
    }
    return 0;
}
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、各カラムヘッダのクリックでソート可能になっています。

参考リンク

コメント