ホームページ >Java >&#&チュートリアル >JTextField 入力を整数のみに効果的に制限するにはどうすればよいですか?

JTextField 入力を整数のみに効果的に制限するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-09 07:06:09864ブラウズ

How to Effectively Restrict JTextField Input to Only Integers?

JTextField 入力を整数に制限する

JTextField コントロールでのユーザー入力を正の整数に制限することは、プログラミングにおける一般的な問題です。この目的で KeyListener を利用しようとしましたが、より効果的なアプローチがあります。

KeyListener に依存するのとは対照的に、DocumentFilter を実装すると、いくつかの利点があります。

  • 使用される入力方法 (キーボード、コピー&ペーストなど) に関係なく、テキスト コンポーネントに入力されるすべてのデータが指定された内容に準拠していることを保証します。
  • データ型の検証 (例: 入力されたデータが整数として解析できることの確認) やデータ長 (例: 最大数の強制など) など、単なる数値範囲チェックを超えた追加の検証が可能になります。

DocumentFilter を使用してこれを実装するには、次のことを考慮してください。例:

import javax.swing.text.PlainDocument;
import javax.swing.text.DocumentFilter;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;

class IntDocumentFilter extends PlainDocument {

    @Override
    public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {

        if (string == null || string.isEmpty()) {
            super.insertString(fb, offset, string, attr);
        } else {
            try {
                Integer.parseInt(string);
                super.insertString(fb, offset, string, attr);
            } catch (NumberFormatException e) {
                // warn the user and don't allow the insert
            }
        }
    }

    @Override
    public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {

        if (text == null || text.isEmpty()) {
            super.replace(fb, offset, length, text, attrs);
        } else {
            try {
                Integer.parseInt(text);
                super.replace(fb, offset, length, text, attrs);
            } catch (NumberFormatException e) {
                // warn the user and don't allow the insert
            }
        }
    }
}

このフィルターを使用するには、フィルターをインスタンス化し、JTextField に関連付けられた PlainDocument オブジェクトに設定します:

JTextField textField = new JTextField();
PlainDocument doc = (PlainDocument) textField.getDocument();
doc.setDocumentFilter(new IntDocumentFilter());

この実装:

  • 入力文字列を整数として解析できるかどうかをチェックします。
  • 整数以外の入力を無視して、有効な整数入力を挿入または置換します。
  • ユーザーが null または空の文字列を挿入しようとする場合を処理します。

これらの手法により、入力が目的の制約に従っていることを確認し、JTextField が受け入れるデータのタイプを制御できるようにします。

以上がJTextField 入力を整数のみに効果的に制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。