TITLE:TableRowSorterでJTableのソート

TableRowSorterでJTableのソート

Posted by terai at 2007-02-12

概要

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を設定することで、カラムヘッダのクリックによる行ソートが行えます。

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


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


RowSorter を直接指定しなくても、autoCreateRowSorter(true) とすると、JTable が自動的に RowSorter を作成して、ソートが出来るようになります。

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

参考リンク

コメント

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