JTable での単純なソート(並べ替え)
JTable には行をソートするための便利な機能が備わっています。
あるカラムヘッダーをクリックしたときに、そのカラムのデータの昇順、降順で行を並べ替えることができます。
これを実装する方法をみてみましょう。
テーブルローソーター
JTable では行をソート (並べ替え) する役目はソーターオブジェクト (sorter object) が担っています。
従って、本来はソーターオブジェクトを作成しないといけないのです。ところが、並べ替えなどは昇順、降順など、ある程度決まりきったものなので、 デフォルトのソーターオブジェクトを作成することもできるようになってます。
JTable の setAutoCreateRowSorter メソッドを true を渡して呼べば自動的にソートできるようになります。
package com.keicode.java.testapp;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.TableColumn;
@SuppressWarnings("serial")
public class TableTest19 extends JFrame {
final JTable table = new JTable();
final MyTableModel3 tableModel = new MyTableModel3();
public TableTest19() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(350, 150);
table.setAutoCreateRowSorter(true);
table.setModel(tableModel);
TableColumn col = table.getColumnModel().getColumn(0);
col.setCellRenderer(new MyTableCellRenderer());
col.setCellEditor(new MyCellEditor());
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
TableTest19 app = new TableTest19();
app.setVisible(true);
}
});
}
}
尚、ここで使っている MyTableModel3 とか MyCellEditor などは、 順番に記事を読んでいる人は既にお持ちと思いますが、存在しないなどのエラーがでたら 「JTable のセルの値を更新するテーブルモデルの実装方法」と 「JTable のセルに編集用のドロップダウンを設定する方法」をみてください。
ソーターオブジェクトは、ソートだけではなくデータのフィルターにも関わります。次の記事でデータフィルターを実装します。