JavaでJTableのセル編集を無効にする方法をわかりやすく解説
JTableは、複雑なデータ構造を表形式で表示するためのJComponentのサブクラスです。JTableはMVC(Model View Controller)デザインパターンに従っており、データを行と列の形式で効率的に表示できます。また、TableModelListener、TableColumnModelListener、ListSelectionListener、CellEditorListener、RowSorterListenerといった各種リスナーインターフェースを利用することで、テーブルの状態変化を柔軟に検知できます。
デフォルトの状態では、JTableのセル内のテキストはダブルクリックなどで編集可能になっています。しかし、参照専用のテーブルを作りたい場合など、セルの編集機能を無効化したいケースは少なくありません。
その実現方法はシンプルです。JTableクラスのeditCellAt()メソッドをオーバーライドし、常にfalseを返すようにするだけです。これにより、ユーザーがセルをクリックしてもエディタが起動しなくなり、編集が完全に無効化されます。
サンプルコード
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public final class DisableJTableMouseClickTest extends JFrame {
private JTable table;
private JScrollPane scrollPane;
public DisableJTableMouseClickTest() {
setTitle("DisableJTableMouseClick Test");
String[] columnNames = {"Country", "Rank"};
Object[][] data = {{"England", "1"}, {"India", "2"},
{"New Zealand", "3"}, {"Australia", "4"},
{"South Africa", "5"}, {"Pakistan", "6"}};
table = new JTable(data, columnNames) {
// editCellAt()をオーバーライドして常にfalseを返すことで編集を無効化
public boolean editCellAt(int row, int column, java.util.EventObject e) {
return false;
}
};
table.setRowSelectionAllowed(false);
scrollPane = new JScrollPane(table);
add(scrollPane);
setSize(400, 275);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new DisableJTableMouseClickTest();
}
}
実行結果

このコードを実行すると、国名とランキングを表示するテーブルが画面中央に表示されます。セルをクリックしても編集用のテキストフィールドは表示されず、データは閲覧のみ可能な状態になります。行選択もsetRowSelectionAllowed(false)によって無効化されているため、純粋なデータ表示用途に適したテーブルとなっています。
なお、特定の列だけ編集を許可したい場合は、editCellAt()内で条件分岐を行うか、TableModelのisCellEditable()メソッドをオーバーライドする方法もあります。用途に応じて使い分けるとよいでしょう。
-
JavaでJFrameの最大化ボタンを無効化する方法を解説
JFrameは、javax.swingパッケージに属するクラスで、java.awt.Frameクラスを継承しています。境界線とタイトルバーを持つトップレベルウィンドウであり、JFrameクラスには外観や動作をカスタマイズするための多数のメソッドが用意されています。JFrameのサイズを設定した後でも、デフォルトの状態ではユーザーが自由にウィンドウサイズを変更できてしまいます。具体的には、カーソルをウィンドウの隅に合わせてドラッグすればサイズを変更できますし、右上にある閉じるボタンの隣の「最大化」ボタンを押せば、画面いっぱいに拡大されてしまいます。これは、JFrameクラスではリサイズ(resi
-
JavaでJTextFieldに入力できる文字数を制限する方法(PlainDocument活用)
JTextFieldは、Swingアプリケーションにおいてユーザーにテキストを1行形式で入力させるための、最も重要なコンポーネントの一つです。フォームや検索ボックスなど、さまざまな場面で利用されますが、場合によっては「入力できる文字数に上限を設けたい」という要件が発生します。このような文字数制限は、PlainDocumentクラスを継承したカスタムドキュメントを作成することで簡単に実現できます。ドキュメントはJTextFieldの内部でテキストデータを管理する役割を持つため、ここで挿入処理を制御すれば、上限を超える文字入力を防ぐことが可能です。実装のポイントPlainDocumentを継承した