Пользовательский сортировщик строк Java JTable

У меня есть JTable, который загружает данные из базы данных, а затем создает итоговую строку в нижней части таблицы. Я хочу, чтобы пользователь мог сортировать таблицу, но я хотел бы, чтобы сводная строка всегда оставалась внизу таблицы.

Я пытался создать пользовательский TableRowSorter, но у меня возникли проблемы с тем, чтобы понять его и заставить его делать то, что я хочу.

Кто-нибудь знает, как это сделать? Спасибо


person Arrdeearr    schedule 31.01.2013    source источник


Ответы (1)


Вам нужен класс, который содержит, является ли значение сводкой или нет. Что-то вроде этого

public class SummarizedValue {
  public Integer value;
  public boolean summarized;
  public String toString() { 
    return null == value? "" : value.toString();
  }
}

public class SummaryComparator implements Comparator<SummarizedValue> {
  public int compare(SummarizedValue v1, SummarizedValue v2) {
    if (v1.summarized) return 1;
    if (v2.summarized) return -1;
    return v1.value.compareTo(v2.value);
  }
}

public class SummaryBackComparator implements Comparator<SummarizedValue> {
  public int compare(SummarizedValue v1, SummarizedValue v2) {
    if (v1.summarized) return 1;
    if (v2.summarized) return -1;
    return v2.value.compareTo(v1.value);
  }
}

Вам нужно отобразить объекты класса SummarizedValue в вашем столбце, и ваш сортировщик строк должен вернуть SummaryComparator. Также вам необходимо переопределить поведение переключения в RowSorter, чтобы использовать SummaryBackComparator.

person Sergiy Medvynskyy    schedule 31.01.2013
comment
Потрясающий! Это именно то, что я искал. Спасибо. - person Arrdeearr; 31.01.2013
comment
+1, но я думаю, что для Java6 не требуется создавать компаратор, я вижу некоторые особые случаи, но .... value? "" : value.toString(); :-) - person mKorbel; 01.02.2013