【Java】JTableのセル内にチェックボックス(JCheckBox)を表示・追加する方法
JTableはJComponentクラスのサブクラスであり、複数の行と列から構成される表形式のデータを表示するためのコンポーネントです。JTable上で値が選択されるとTableModelEventが発生し、このイベントはTableModelListenerインターフェースを実装することで処理できます。
JTableのセル内にチェックボックスを表示したい場合は、テーブルモデルのgetColumnClass()メソッドをオーバーライドし、Boolean.classを返すようにします。こうすることで、Swingは該当する列に対して自動的にチェックボックス(JCheckBox)をセルレンダラーおよびセルエディターとして使用するようになります。
実装例
以下のコードでは、DefaultTableModelの匿名サブクラスでgetColumnClass()をオーバーライドし、すべての列の型としてBoolean.classを返しています。その結果、テーブルの各セルにはチェックボックスが表示され、クリックでオン/オフを切り替えられます。
import java.awt.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class JCheckBoxJTableTest extends JFrame {
private JTable table;
private DefaultTableModel model;
public JCheckBoxJTableTest() {
Random rnd = new Random();
model = new DefaultTableModel(new Object[]{"Check Box1", "Check Box2", "Check Box3"}, 0) {
@Override
public Class<?> getColumnClass(int columnIndex) {
return Boolean.class;
}
};
// ランダムな真偽値を持つ10行分のデータを追加
for (int index = 0; index < 10; index++) {
model.addRow(new Object[]{rnd.nextBoolean()});
}
table = new JTable(model);
add(new JScrollPane(table));
setTitle("JCheckBoxJTable Test");
setSize(375, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new JCheckBoxJTableTest();
}
}
実行結果
プログラムを実行すると、各セルにチェックボックスが配置されたJTableが表示されます。チェックボックスはマウスのクリックで選択・解除でき、その状態はモデル側のBoolean値として管理されます。

ポイントまとめ
- getColumnClass()をオーバーライドしてBoolean.classを返すことで、チェックボックス列を実現できる。
- チェックボックスの描画と編集はSwingが標準のレンダラー/エディターで自動的に処理するため、独自のセルエディターを実装する必要はない。
- 特定の列だけをチェックボックスにしたい場合は、列インデックスに応じて条件分岐させるとよい。
-
JavaのJMenuからJTabbedPaneに新しいタブを追加する方法
JTabbedPaneとはJTabbedPaneは、JComponentクラスを継承したSwingコンポーネントの一つで、複数のパネルをタブ形式で簡単に切り替えられるようにするUI部品です。各タブには1つのコンポーネントが関連付けられており、そのタブが選択されると対応するコンポーネントが表示されます。JTabbedPaneは、タブが選択されたタイミングでChangeListenerインターフェースを通じてイベントを発生させることができます。JTabbedPaneの主なメソッドには、add()、addTab()、fireStateChanged()、createChangeListener()、
-
JavaでJTextFieldに入力できる文字数を制限する方法(PlainDocument活用)
JTextFieldは、Swingアプリケーションにおいてユーザーにテキストを1行形式で入力させるための、最も重要なコンポーネントの一つです。フォームや検索ボックスなど、さまざまな場面で利用されますが、場合によっては「入力できる文字数に上限を設けたい」という要件が発生します。このような文字数制限は、PlainDocumentクラスを継承したカスタムドキュメントを作成することで簡単に実現できます。ドキュメントはJTextFieldの内部でテキストデータを管理する役割を持つため、ここで挿入処理を制御すれば、上限を超える文字入力を防ぐことが可能です。実装のポイントPlainDocumentを継承した