Skip to content

Instantly share code, notes, and snippets.

@e3e6
Created May 10, 2012 09:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save e3e6/2652036 to your computer and use it in GitHub Desktop.
Save e3e6/2652036 to your computer and use it in GitHub Desktop.
JTable filtering
/* Спасибо за инфу.
* В конечном счёте мне нужно было добавить несколько фильтров на таблицу, поэтому у меня получился вот
* такой код, который, кстати говоря, даже работает: =)) Хотя выглядит нагромождённо... Вобщем, оставляю
* код, если у кого-то когда-то возникнет похожая проблема.
* Ну, а если будут мысли как тоже самое написать более проще, то с удовольствием поучусь.
* (c) http://www.sql.ru/forum/actualthread.aspx?tid=789123
*/
CaretListener listener = new CaretListener() {
public void caretUpdate(CaretEvent caretEvent) {
try {
java.util.List<RowFilter<Object,Object>> filters = new ArrayList<RowFilter<Object,Object>>(3);
filters.add(RowFilter.regexFilter("(?i)" + txtRegNum.getText(),0));
filters.add(RowFilter.regexFilter("(?i)" + txtFirstName.getText(),1));
filters.add(RowFilter.regexFilter("(?i)" + txtLastName.getText(),2));
filters.add(RowFilter.regexFilter("(?i)" + txtProfession.getText(),3));
filters.add(RowFilter.regexFilter("(?i)" + txtSex.getText(),4));
filters.add(RowFilter.regexFilter("(?i)" + txtDateofBirth.getText(),5));
RowFilter<Object,Object> serviceFilter = RowFilter.andFilter(filters);
sorter.setRowFilter(serviceFilter);
} catch (Exception e)
{
System.out.println(e.getMessage());
}
}
};
txtRegNum.addCaretListener(listener);
txtFirstName.addCaretListener(listener);
txtLastName.addCaretListener(listener);
txtProfession.addCaretListener(listener);
txtSex.addCaretListener(listener);
txtDateofBirth.addCaretListener(listener);
// (c) http://www.sql.ru/forum/actualthread.aspx?tid=507673
System.out.println(Pattern.compile("ТесТ",Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE).matcher("aaa тест bbb").replaceAll("<test>ТесТ</test>"));
Все оказывается очень просто для английских букв:
RowFilter.regexFilter("(?i)" + line)
Но с кириллицей такой фокус не проходит. Приходится изловчатся так:
StringBuilder newPattern = new StringBuilder();
char c = pattern.charAt(i);
newPattern.append('[');
newPattern.append(Character.toLowerCase(c));
newPattern.append(Character.toUpperCase(c));
newPattern.append(']');
и так для каждой буквы
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment