Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > JTable странная фильтрация


Автор: zum 18.3.2010, 14:06
Код

TableRowSorter sorter = new TableRowSorter(Table.getModel());
        Table.setRowSorter(sorter);
        RowFilter rf;
        if (F.getText().length()>0)
        {
            try {
               rf = RowFilter.regexFilter("(?i).*" + F.getText() + ".*");
            }
            catch (java.util.regex.PatternSyntaxException e) {
                return;
            }
            sorter.setRowFilter(rf);
            return;
        }
      sorter.setRowFilter(null) ;
    }


2 строчки в таблице:
абб
Абб

ввожу "а" оставляет обе, ввожу "аб" осталяет только первую, ввожу "А" только вторую...
почему поясните пожалуста? вроде флаг не учитвать регистр стоит...

Автор: jk1 18.3.2010, 14:36
Цитата

почему поясните пожалуста?

Потому что регулярное выражение составлено неправильно.
Если вам нужна регистронезависимая проверка на вхождение, пишите так
Код

rf = RowFilter.regexFilter("(?i)" + F.getText());

Автор: zum 18.3.2010, 15:25
Ничего не изменилось работает точно также

rf = RowFilter.regexFilter("(?i)" + F.getText());


Автор: zum 18.3.2010, 17:03
Как выяснилось проблема только с кириллицей
На с английскими буковками такой проблемы нет
Куда копать кто подскажет?

Автор: jk1 18.3.2010, 17:21
Попробуйте добавить флаг (?u), он обеспечивает корректную работу флага (?i) с юникодом

Автор: zum 18.3.2010, 17:27
rf = RowFilter.regexFilter("(?i)(?u)" + F.getText());

+1 работает, спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)