Java6のJTableのfiltering

Java6 SEのJTableのフィルタリングを調べてて、サンプル発見。

How to Use Tables (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)

http://download.oracle.com/javase/tutorial/figures/uiswing/components/FilterFilter.png

「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の複数形