---
category: swing
folder: FilterWithoutSorting
title: JTableのRowSorterをフィルタありソート不可にする
tags: [JTable, TableRowSorter]
author: aterai
pubdate: 2008-08-04T00:17:37+09:00
description: フィルタありでソート不可のTableRowSorterを作成します。
image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTMr425A3I/AAAAAAAAAZk/ZFpsuUZWGcQ/s800/FilterWithoutSorting.png
---
* 概要 [#summary]
フィルタありでソート不可の`TableRowSorter`を作成します。

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

* サンプルコード [#sourcecode]
#code(link){{
final TableRowSorter<TableModel> sorter = new TableRowSorter<>(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;
  }
});
}}

* 解説 [#explanation]
上記のサンプルでは、行フィルタだけ利用して、行のソートは不可にしておきたいので、`TableRowSorter`に以下のような設定をしています。
上記のサンプルでは、行のフィルタリングのみ有効にして行のソートは不可にしたいので、`TableRowSorter`に以下のような設定をしています。

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

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

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

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