TITLE:JTableのRowSorterをフィルタありソート不可にする
#navi(../)
#tags(JTable, TableRowSorter)
RIGHT:Posted by &author(aterai); at 2008-08-04
* JTableのRowSorterをフィルタありソート不可にする [#nf0e4e54]
フィルタありでソート不可の`TableRowSorter`を作成します。

#download
#ref(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTMr425A3I/AAAAAAAAAZk/ZFpsuUZWGcQ/s800/FilterWithoutSorting.png)

** サンプルコード [#cbb5da29]
#code(link){{
final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model) {
  @Override public boolean isSortable(int column) {
    return false;
  }
};
sorter.setRowFilter(new RowFilter<TableModel,Integer>() {
  @Override public boolean include(
      Entry<? extends TableModel, ? extends Integer> entry) {
    return entry.getIdentifier() % 2 == 0;
  }
});
}}

** 解説 [#a272ecaa]
上記のサンプルでは、行ファルタだけ利用して、行のソートは出来なくしておきたいので、`sorter`に以下のような設定をしています。

- `DefaultRowSorter#setRowFilter(RowFilter)`で偶数行だけ表示するフィルターを設定
- `DefaultRowSorter#isSortable(int)`をオーバーライドして常に`false`を返す

----
`DefaultRowSorter#setSortable(int, boolean)`を使用して、一部の列だけソート不可にすることもできます。

** 参考リンク [#ea345b1c]
- [http://docs.oracle.com/javase/jp/6/api/javax/swing/DefaultRowSorter.html DefaultRowSorter (Java Platform SE 6)]
- [[JTableHeaderのカラムを選択不可にする>Swing/DisabledHeader]]

** コメント [#g670778a]
#comment