JTable での単純なソート(並べ替え)

JTable には行をソートするための便利な機能が備わっています。

あるカラムヘッダーをクリックしたときに、そのカラムのデータの昇順、降順で行を並べ替えることができます。

これを実装する方法をみてみましょう。

テーブルローソーター

JTable では行をソート (並べ替え) する役目はソーターオブジェクト (sorter object) が担っています。

従って、本来はソーターオブジェクトを作成しないといけないのです。ところが、並べ替えなどは昇順、降順など、ある程度決まりきったものなので、 デフォルトのソーターオブジェクトを作成することもできるようになってます。

JTablesetAutoCreateRowSorter メソッドを 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 のセルに編集用のドロップダウンを設定する方法」をみてください。

ソーターオブジェクトは、ソートだけではなくデータのフィルターにも関わります。次の記事でデータフィルターを実装します。

JTable でデータフィルターを実装する方法

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Java 入門