JavaでJTableの列の並べ替えを無効にする方法
JTableはJComponentクラスのサブクラスであり、情報を複数の行と列で表示するテーブルを作成するために使用されます。JTableから値が選択されると、TableModelEventが生成され、TableModelListenerインターフェースを実装することでこのイベントを処理できます。
デフォルトでは、JTableの列はユーザーがドラッグ&ドロップで自由に並べ替えられるようになっています。しかし、アプリケーションの仕様によっては、ユーザーに列の順序を変更させたくない場合もあります。そのような場合は、table.getTableHeader().setReorderingAllowed()メソッドを使用し、引数にfalseを指定することで、列の並べ替えを無効にできます。
また、併せてsetResizingAllowed(false)を設定すれば、ユーザーによる列幅の変更も禁止することが可能です。
コード例
import java.awt.*;
import javax.swing.*;
public final class JTableColumnReorderingTest extends JFrame {
JTable table;
JScrollPane scrollPane;
public JTableColumnReorderingTest() {
setTitle("JTableColumnReordering Test");
String[] columnNames = {"名前", "電話番号", "コース"};
Object[][] data = {
{"Raja", "123456789", "Java"},
{"Adithya", "456123789", ".Net"},
{"Vineet", "789456123", "JavaScript"},
{"Archana", "987456321", "Python"},
{"Krishna", "321456987", "Scala"},
{"Jai", "456321789", "ServiceNow"}
};
table = new JTable(data, columnNames);
scrollPane = new JScrollPane(table);
// 列の並べ替えを許可しない
table.getTableHeader().setReorderingAllowed(false);
// 列幅の変更も許可しない
table.getTableHeader().setResizingAllowed(false);
add(scrollPane);
setSize(375, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new JTableColumnReorderingTest();
}
}
実行結果
上記のコードを実行すると、以下のようなウィンドウが表示されます。ヘッダーをドラッグしても列の順序は変更されません。

ポイントまとめ
- setReorderingAllowed(false):テーブルヘッダーのドラッグによる列の並べ替えを禁止します。
- setResizingAllowed(false):マウス操作による列幅の変更を禁止します。
- これらの設定はJTableHeaderに対して行うため、
table.getTableHeader()経由で呼び出す必要があります。
-
JavaでJComboBoxの項目をソートする方法!DefaultComboBoxModelのカスタマイズ例
JComboBoxはJComponentクラスのサブクラスであり、テキストフィールドと、ユーザーが値を選択できるドロップダウンリストを組み合わせたSwingコンポーネントです。ユーザーがコンボボックスを操作すると、ActionListener、ChangeListener、ItemListenerといったインターフェースを通じてイベントを受け取ることができます。 ただし、標準のJComboBoxにはアイテムを並べ替える(ソートする)機能は用意されていません。そこで本記事では、DefaultComboBoxModelクラスを継承した独自のモデルクラスを作成し、コンボボックスの項目を常に整序された
-
JavaでJTableのヘッダー(JTableHeader)にワードラップを実装する方法
JTableHeaderとはJTableHeaderは、JComponentクラスのサブクラスです。JTableオブジェクトを生成すると、コンストラクタが自動的に新しいJTableHeaderオブジェクトを作成し、テーブルコンポーネントのヘッダーを管理します。JTableHeaderオブジェクトはテーブルのカラムモデル(column model)と関連付けられており、これによりUIデリゲートが列のドラッグ操作や各列のヘッダーセルの描画を行えるようになっています。JTableクラスは、テーブルヘッダーとしてJTableHeaderオブジェクトを設定するためのsetTableHeader()メソッ