JTable сортировка и фильтрация - PullRequest
       26

JTable сортировка и фильтрация

0 голосов
/ 29 сентября 2011

Я создаю программу, которая фильтрует содержимое JTable, используя два столбца.Я использовал RowSorter, и все работает нормально - по крайней мере, в соответствии с тем, что я вижу (представление).

Каждую строку в таблице можно дважды щелкнуть, чтобы открыть диалоговое окно.Этот диалог позволяет редактировать информацию в таблице.Однако информация в диалоговом окне остается той же, что и в исходном представлении (до того, как была использована фильтрация).

Пример:

До фильтрации первой строки таблицыэто строка а.После фильтрации первая строка таблицы - это строка b.

Однако, когда я дважды щелкаю, чтобы открыть диалоговое окно в первой строке (после фильтрации, которая теперь должна быть строкой b, открывается диалоговое окно для строки a).) [Надеюсь, я объяснил это достаточно хорошо]

Думаю, моя проблема в том, что модель не обновляется после того, как фильтры были установлены.Я пытался:

        for(int i = 0; i < table.getRowCount(); i++){
        table.convertRowIndexToView(i);
    }

и

for(int i = 0; i < table.getRowCount(); i++){
        table.convertRowIndexToModel(i);
    }

У меня также возникает аналогичная проблема при сортировке таблицы с использованием заголовков столбцов.

Как мнерешить эту проблему?

Ответы [ 3 ]

2 голосов
/ 29 сентября 2011

Я думаю, что моя проблема в том, что модель не обновляется после установки фильтров

Модель никогда не обновляется.

Обновляется только представление для отображения данных из модели в отсортированном / отфильтрованном порядке.

Каждый ряд в таблице можно дважды щелкнуть, чтобы открыть диалоговое окно.

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

Поэтому вам нужно использовать convertRowIndexToModel (...), чтобы получить номер строки модели, чтобы вы могли получить доступ к данным модели, отображаемым в диалоговом окне редактирования. Это можно сделать только для редактируемой строки, а не всей таблицы.

1 голос
/ 29 сентября 2011

см. Учебник о JTable , есть отличный пример о Comparator и хорошие объяснения о том, как использовать TableModel тоже

0 голосов
/ 29 сентября 2011

После изменения данных вы можете обновить таблицу, как показано ниже:

for(int i = 0; i < table.getRowCount(); i++)
{         table.convertRowIndexToModel(i);     } 

table = new jTable(myModel);

или

myModel.fireTableDataChanged()

Надеюсь, это поможет

Бурак

...