Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaでJTableに空のセルがあるかどうかを検証する方法

JTableとは

JTableは、複雑なデータ構造を表示するために使用されるJComponentクラスのサブクラスです。JTableはMVC(Model View Controller)デザインパターンに従っており、データを行と列の形式で画面に表示します。また、TableModelListenerTableColumnModelListenerListSelectionListenerCellEditorListenerRowSorterListenerといった各種リスナーインターフェースを生成することができます。

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に空のセルがあるかどうかを検証する方法

  1. 【Java】JTableのセル内にチェックボックス(JCheckBox)を表示・追加する方法

    JTableはJComponentクラスのサブクラスであり、複数の行と列から構成される表形式のデータを表示するためのコンポーネントです。JTable上で値が選択されるとTableModelEventが発生し、このイベントはTableModelListenerインターフェースを実装することで処理できます。 JTableのセル内にチェックボックスを表示したい場合は、テーブルモデルのgetColumnClass()メソッドをオーバーライドし、Boolean.classを返すようにします。こうすることで、Swingは該当する列に対して自動的にチェックボックス(JCheckBox)をセルレンダラーおよび

  2. JavaのJTableで各列の幅を変更する方法をわかりやすく解説

    Java Swingで表形式のデータを扱う際、デフォルトの列幅では文字が切れてしまったり、レイアウトが崩れたりすることがあります。本記事では、JTableの各列の幅を自由に変更する方法を、基本の特徴からサンプルコードまで詳しく解説します。 JTableとは JTableは、複雑なデータ構造を表示するためのJComponentのサブクラスです。 MVC(Model View Controller)デザインパターンに基づいて設計されており、データを行と列の形式で表示できます。 DefaultTableModelクラスはAbstractTableModelを拡張したクラスで、JTableに対して行