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

JavaでJTextFieldに数値のみ入力できるようにする方法

JTextFieldの入力制限とは

デフォルトのJTextFieldは、数値文字特殊文字など、あらゆる種類の入力を受け付けることができます。しかし、ユーザーがJTextFieldに入力した内容を検証するのは意外と難しく、特にintなどの数値型へ変換する必要がある場合は注意が必要です。

本記事では、JTextFieldに数値のみ入力できるように制限する方法を、具体的なサンプルコードとともに解説します。

実装のポイント

キー入力を監視するためにKeyListener(KeyAdapter)を使用し、押されたキーの文字が「0」から「9」の範囲内であるかどうかを判定します。数値であれば編集を許可し、それ以外の場合は編集を無効化して警告メッセージを表示します。

サンプルコード

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JTextFieldValidation extends JFrame {
    JTextField tf;
    Container container;
    JLabel label;

    public JTextFieldValidation() {
        container = getContentPane();
        setBounds(0, 0, 500, 300);
        tf = new JTextField(25);
        setLayout(new FlowLayout());
        container.add(new JLabel("Enter the number"));
        container.add(tf);
        container.add(label = new JLabel());
        label.setForeground(Color.red);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

        tf.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent ke) {
                String value = tf.getText();
                int l = value.length();
                if (ke.getKeyChar() >= '0' && ke.getKeyChar() <= '9') {
                    tf.setEditable(true);
                    label.setText("");
                } else {
                    tf.setEditable(false);
                    label.setText("* Enter only numeric digits(0-9)");
                }
            }
        });
        setVisible(true);
    }

    public static void main(String[] args) {
        new JTextFieldValidation();
    }
}

コードの解説

  • KeyAdapterの利用:KeyListenerインターフェースを実装すると不要なメソッドも定義する必要がありますが、KeyAdapterクラスを継承すれば必要なメソッドだけをオーバーライドできます。
  • keyPressedメソッド:キーが押されるたびに呼び出され、getKeyChar()で取得した文字が「0〜9」の範囲にあるかをチェックします。
  • setEditable(true/false):数値以外のキーが押された場合はテキストフィールドの編集を一時的に無効化し、不正な入力を防ぎます。
  • エラーメッセージの表示:赤色のJLabelを使って「0〜9の数字のみ入力してください」という警告をユーザーに伝えます。

実行結果

このプログラムを実行すると、テキストフィールドには数字(0〜9)のみ入力可能になります。英字や記号を入力しようとすると、画面上に赤い警告メッセージが表示され、入力が拒否されます。

JavaでJTextFieldに数値のみ入力できるようにする方法

補足:より堅牢な代替手段

KeyListenerによる制御はシンプルですが、貼り付け(ペースト)操作までは防げないという弱点があります。より厳密に入力を制御したい場合は、DocumentFilterJFormattedTextField、あるいはInputVerifierを使用する方法も検討するとよいでしょう。これらを活用すれば、ペーストされた文字列に対しても確実にバリデーションを行えます。

  1. JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説

    JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー

  2. JavaでJTextFieldに入力できる文字数を制限する方法(PlainDocument活用)

    JTextFieldは、Swingアプリケーションにおいてユーザーにテキストを1行形式で入力させるための、最も重要なコンポーネントの一つです。フォームや検索ボックスなど、さまざまな場面で利用されますが、場合によっては「入力できる文字数に上限を設けたい」という要件が発生します。このような文字数制限は、PlainDocumentクラスを継承したカスタムドキュメントを作成することで簡単に実現できます。ドキュメントはJTextFieldの内部でテキストデータを管理する役割を持つため、ここで挿入処理を制御すれば、上限を超える文字入力を防ぐことが可能です。実装のポイントPlainDocumentを継承した