Java6のJTableのfiltering
Java6 SEのJTableのフィルタリングを調べてて、サンプル発見。
How to Use Tables (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
「Filter Text:」に正規表現で条件を入力すると、一致したデータだけが表示される。
しかし、第一カラムの「FirstName」しか対象にしていない模様。
どこで何と比較しているのかソース読んでも分からなかったorz。
Eclipseでデバッグで追いかけたりしながらようやく判明。
結論
private void newFilter() { RowFilter<MyTableModel, Object> rf = null; //If current expression doesn't parse, don't update. try { rf = RowFilter.regexFilter(filterText.getText(), 0); } catch (java.util.regex.PatternSyntaxException e) { return; } sorter.setRowFilter(rf); }
で、RowFilter#regexFilterの引数の最後の「0」は「int... indices」*1がカラムを表していた。
なので、
rf = RowFilter.regexFilter(filterText.getText(), 0, 1, 2, 3);
の様にすれば、「LastName」、「Sports」や「# of Year」も対象になる、と。
追記(2011/4/6 12:30)
facebook経由で、
regexFilterメソッドの第2引数を省略すると、すべてのカラムが対象になりますよ。ご参考までに
http://itpro.nikkeibp.co.jp/article/COLUMN/20070323/266096/
とアドヴァイスを賜りました。ありがとうございます。
識者の方から直接アドヴァイスをいただけるなんて、つくづくスゴイなぁと。
*1:indicesはindexの複数形