「簡単な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出力への切り替え