SwingでExcelデータ入力フォームを自作! バリデーション付きUIの作り方

「簡単なExcel入力用の業務ツールを自作したい」
「でもWebアプリにするほどじゃない…」
そんな方に向けて、JavaのSwingで作るExcel入力フォームと、バリデーション付きUIの作り方を解説します。


この記事の内容

  • Java SwingでGUI入力フォームを作る方法
  • 入力データのバリデーション(チェック処理)
  • Apache POIでExcelファイルに保存する手順

完成イメージ

以下のようなシンプルな画面をSwingで作成します。

  • 名前・メールアドレス・年齢を入力
  • 保存ボタンでExcelファイルに出力
  • 空欄や形式ミスにはエラーメッセージ

1. Swingで入力フォームを作成


public class ExcelInputForm extends JFrame {

    private JTextField nameField;
    private JTextField emailField;
    private JTextField ageField;
    private JLabel messageLabel;

    public ExcelInputForm() {
        setTitle("Excel入力フォーム");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(400, 300);
        setLocationRelativeTo(null);
        initComponents();
    }

    private void initComponents() {
        nameField = new JTextField(20);
        emailField = new JTextField(20);
        ageField = new JTextField(5);
        messageLabel = new JLabel(" ");
        messageLabel.setForeground(Color.RED);

        JButton saveButton = new JButton("保存");
        saveButton.addActionListener(e -> saveData());

        JPanel panel = new JPanel(new GridLayout(5, 2, 10, 10));
        panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
        panel.add(new JLabel("名前:"));
        panel.add(nameField);
        panel.add(new JLabel("メール:"));
        panel.add(emailField);
        panel.add(new JLabel("年齢:"));
        panel.add(ageField);
        panel.add(new JLabel(""));
        panel.add(saveButton);
        panel.add(messageLabel);

        add(panel);
    }

2. 入力値のバリデーション処理


private boolean validateInput() {
    String name = nameField.getText().trim();
    String email = emailField.getText().trim();
    String ageText = ageField.getText().trim();

    if (name.isEmpty() || email.isEmpty() || ageText.isEmpty()) {
        messageLabel.setText("すべての項目を入力してください。");
        return false;
    }

    if (!email.matches("^[\\w\\.-]+@[\\w\\.-]+\\.\\w{2,}$")) {
        messageLabel.setText("メールアドレスの形式が不正です。");
        return false;
    }

    try {
        int age = Integer.parseInt(ageText);
        if (age < 0 || age > 120) {
            messageLabel.setText("年齢は0〜120の範囲で入力してください。");
            return false;
        }
    } catch (NumberFormatException e) {
        messageLabel.setText("年齢は数字で入力してください。");
        return false;
    }

    messageLabel.setText(" ");
    return true;
}

3. Apache POIでExcelに保存

pom.xml(Maven)に以下を追加します:


<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>5.2.5</version>
</dependency>

保存処理のコード


private void saveData() {
    if (!validateInput()) return;

    String name = nameField.getText().trim();
    String email = emailField.getText().trim();
    String age = ageField.getText().trim();

    try (Workbook workbook = new XSSFWorkbook()) {
        Sheet sheet = workbook.createSheet("入力データ");
        Row header = sheet.createRow(0);
        header.createCell(0).setCellValue("名前");
        header.createCell(1).setCellValue("メール");
        header.createCell(2).setCellValue("年齢");

        Row dataRow = sheet.createRow(1);
        dataRow.createCell(0).setCellValue(name);
        dataRow.createCell(1).setCellValue(email);
        dataRow.createCell(2).setCellValue(Integer.parseInt(age));

        try (FileOutputStream out = new FileOutputStream("input_data.xlsx")) {
            workbook.write(out);
        }

        messageLabel.setForeground(new Color(0, 128, 0));
        messageLabel.setText("Excelに保存しました!");
    } catch (IOException e) {
        e.printStackTrace();
        messageLabel.setForeground(Color.RED);
        messageLabel.setText("保存中にエラーが発生しました。");
    }
}

4. メインクラスから起動


public class Main {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new ExcelInputForm().setVisible(true);
        });
    }
}

まとめ:Swingでも実用ツールは作れる

Java SwingとApache POIを組み合わせれば、Webアプリに頼らなくても社内用の軽量なExcel入力ツールを自作できます。
今回のポイントは以下の通り

  • Swingで簡単なUIを作る
  • バリデーションをしっかり実装する
  • Apache POIでExcelに安全に保存

ちょっとした業務の効率化に、Java Swingはまだまだ現役で使えます。
今後は以下の機能追加も検討できます

  • 複数行のデータ入力対応
  • 入力履歴の読み込み・編集機能
  • CSV出力への切り替え
タイトルとURLをコピーしました