JavaでJTableに空のセルがあるかどうかを検証する方法
JTableとは
JTableは、複雑なデータ構造を表示するために使用されるJComponentクラスのサブクラスです。JTableはMVC(Model View Controller)デザインパターンに従っており、データを行と列の形式で画面に表示します。また、TableModelListener、TableColumnModelListener、ListSelectionListener、CellEditorListener、RowSorterListenerといった各種リスナーインターフェースを生成することができます。
JTableのセルが空かどうかを検証するには、JTableクラスのgetValueAt()メソッドを実装します。この記事のサンプルでは、「Click Here」ボタンをクリックするとアクションイベントが発生し、未入力のセルが存在する場合は「Field is Empty(フィールドが空です)」というポップアップメッセージがユーザーに表示されます。
コード例
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class JTableEmptyValidateTest extends JFrame {
private JPanel panel;
private JTable table;
private JButton button;
String[] columnNames = new String[] {"Student 1", "Student 2"};
String[][] dataValues = new String[][] {{"95", "100"}, {"", "85"}, {"80", "100"}};
public JTableEmptyValidateTest() {
setTitle("Empty Validation Table");
panel = new JPanel();
table = new JTable();
TableModel model = new myTableModel();
table.setModel(model);
panel.add(new JScrollPane(table));
button = new JButton("Click Here");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
if(validCheck()) {
JOptionPane.showMessageDialog(null,"Field is filled up");
} else {
JOptionPane.showMessageDialog(null, "Field is empty");
}
}
});
add(panel, BorderLayout.CENTER);
add(button, BorderLayout.SOUTH);
setSize(470, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public boolean validCheck() {
if(table.getCellEditor()!= null) {
table.getCellEditor().stopCellEditing();
}
for(int i=0; i < table.getRowCount(); i++) {
for(int j=0; j < table.getColumnCount(); j++) {
String value = table.getValueAt(i,j).toString();
if(value.trim().length() == 0) {
return false;
}
}
}
return true;
}
class myTableModel extends DefaultTableModel {
myTableModel() {
super(dataValues, columnNames);
}
public boolean isCellEditable(int row, int cols) {
return true;
}
}
public static void main(String args[]) {
new JTableEmptyValidateTest();
}
}
ポイント解説
- validCheck()メソッド:すべてのセルを二重ループで走査し、
getValueAt(i, j)で取得した値を文字列に変換してチェックします。 - value.trim().length() == 0:前後の空白を除去した文字列の長さが0の場合、そのセルは「空」と判定されます。
- stopCellEditing():編集中のセルがある場合に編集を確定させることで、最新の値に対して正しく検証できるようにしています。
- isCellEditable():DefaultTableModelを継承した独自モデルでtrueを返すことで、すべてのセルを編集可能にしています。
実行結果
プログラムを実行すると、学生の点数データが表示されたテーブルと「Click Here」ボタンを持つウィンドウが起動します。2行目の1列目が空欄のままボタンを押すと「Field is empty」というダイアログが表示され、すべてのセルが入力済みの場合は「Field is filled up」と表示されます。

-
【Java】JTableのセル内にチェックボックス(JCheckBox)を表示・追加する方法
JTableはJComponentクラスのサブクラスであり、複数の行と列から構成される表形式のデータを表示するためのコンポーネントです。JTable上で値が選択されるとTableModelEventが発生し、このイベントはTableModelListenerインターフェースを実装することで処理できます。 JTableのセル内にチェックボックスを表示したい場合は、テーブルモデルのgetColumnClass()メソッドをオーバーライドし、Boolean.classを返すようにします。こうすることで、Swingは該当する列に対して自動的にチェックボックス(JCheckBox)をセルレンダラーおよび
-
JavaのJTableで各列の幅を変更する方法をわかりやすく解説
Java Swingで表形式のデータを扱う際、デフォルトの列幅では文字が切れてしまったり、レイアウトが崩れたりすることがあります。本記事では、JTableの各列の幅を自由に変更する方法を、基本の特徴からサンプルコードまで詳しく解説します。 JTableとは JTableは、複雑なデータ構造を表示するためのJComponentのサブクラスです。 MVC(Model View Controller)デザインパターンに基づいて設計されており、データを行と列の形式で表示できます。 DefaultTableModelクラスはAbstractTableModelを拡張したクラスで、JTableに対して行