TITLE:TableRowSorterでJTableのソート

Posted by terai at 2007-02-12

TableRowSorterでJTableのソート

JDK 6 で導入された、TableRowSorterを利用して、JTableの行を降順、昇順にソートします。

  • &jnlp;
  • &jar;
  • &zip;

#screenshot

サンプルコード

TestModel model = new TestModel();
JTable table = new JTable(model);
RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);

解説

JDK 6 では、JTableにTableRowSorterを設定することで、カラムヘッダのクリックによる行ソートが行えます。

以下のように、JTable#autoCreateRowSorter(true); メソッドを使用した場合も、JTable が自動的に RowSorter を作成して、ソートが出来るようになります。

JTable table = new JTable(model);
table.setAutoCreateRowSorter(true);

TableRowSorterのデフォルトでは、ヘッダクリックで(降順、昇順)とソートが切り替わり、TableSorterのように(降順、昇順、初期状態)ではなくなっています。上記のサンプルでは、下のボタンをクリックすると、DefaultRowSorter#setSortKeys(List)にnullを代入することで初期状態に戻るようにしています。


第二キーを使ったソートはTableRowSorter版では出来ない?ようなので、TableSorter.javaを使う場合もまだあるかもしれません。 複数キーを使ったソートも可能です。デフォルトではソートキーは3つで、ヘッダにマークが表示されるのは最新のソートキーのみですが、クリックした順に保持されるようです。詳しくはドキュメントやTableの内容をソートなどを参照してください。

参考リンク

コメント

  • DefaultRowSorter#setMaxSortKeys(int)で複数のキーを用いたソートも出来ているように思います(b86)。ただ、ヘッダー部分がわかりにくいですが。 -- syo
    • ご指摘ありがとうございます。なるほど、こちら(Tableの内容をソート)を使えばうまくいきそうですね。 -- terai
  • rendererがないので、基本的に数字は左揃え、文字列は右揃えで、中央揃えするにはどうすれば宜しいでしょうか? -- パンダ