Выполнение действия после операции RowSort

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

Первоначально я думал, что просто RowSorterListener поможет, но, к сожалению, он не выполняет операцию после завершения сортировки.

Добавление MouseListener к заголовку JTable может сработать, но решение не очень элегантное.

У кого-нибудь есть идеи?

Огромное спасибо!


Изменить (из комментария): следующее добавлено в метод внутри пользовательского класса TableModel, который расширяет AbstractTableModel. Этот метод вызывается всякий раз, когда JTable устанавливается/указывается в пользовательском классе TableModel.

sorter.addRowSorterListener(new RowSorterListener() {
    @Override public void sorterChanged(RowSorterEvent rowsorterevent) {
        rebuildMItems(); // The method which executes
    }
});

person Chris Cowdery-Corvan    schedule 12.06.2009    source источник
comment
RowSorterListener должно работать. Можете ли вы показать, как вы добавляете RowSorterListener и реализацию вашего метода sorterChanged?   -  person akf    schedule 12.06.2009
comment
Акф, спасибо за помощь. Следующее добавлено в метод внутри пользовательского класса TableModel, который расширяет AbstractTableModel. Этот метод вызывается всякий раз, когда JTable устанавливается/указывается в пользовательском классе TableModel. ‹pre› sorter.addRowSorterListener(new RowSorterListener() { @Override public void sorterChanged(RowSorterEvent rowsorterevent) { rebootMItems(); // Метод, который выполняется } }); ‹/pre› Ничего особо захватывающего :P   -  person Chris Cowdery-Corvan    schedule 12.06.2009
comment
Упс, похоже, форматирование пошло не так. Не могли бы вы сказать, что я новичок в Stack Overflow? :)   -  person Chris Cowdery-Corvan    schedule 12.06.2009
comment
В комментариях ничего форматировать нельзя. Не могли бы вы добавить это к вопросу, пожалуйста?   -  person Michael Myers    schedule 12.06.2009
comment
Вы предполагаете, что функция rebootMItems() действительно вызывается, но вызывается слишком рано?   -  person akf    schedule 12.06.2009


Ответы (1)


Две возможности:

  1. Я вижу, у вас есть пользовательский RowSorter. Не могли бы вы просто добавить вызов своей операции в конце метода sort()?

    Другими словами, можете ли вы добавить это:

    @Override
    public void sort() {
        super.sort();
        doSomethingAfterSortingIsDone();
    }
    

    к вашему сортировщику?

  2. Ваш текущий метод (делающий это в RowSorterListener) выполняет операцию дважды: один раз для SORT_ORDER_CHANGED и один раз для SORTED. Можете ли вы проверить тип события и выполнять операцию только в нужное время?

person Michael Myers    schedule 12.06.2009
comment
Идеально. Большое спасибо, mmyers! - person Chris Cowdery-Corvan; 12.06.2009