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

JTextField が正の整数のみを受け入れるように制限するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-26 13:41:09
オリジナル
609 人が閲覧しました

How Can I Restrict a JTextField to Accept Only Positive Integers?

JTextField 入力を整数に制限する

正の整数のみを受け入れるように JTextField 入力を制限するタスクは頻繁に発生するニーズですが、この制限は実装されています。課題を引き起こす可能性があります。最初に試みたように、この目的で KeyListener を使用すると、いくつかの欠点があります。

KeyListener を使用する場合の欠点:

  • すべての入力をキャプチャできない: KeyListener はキーストロークのみを検出しますが、コピー アンド ペーストによって入力されたデータは処理しないため、バイパスされる可能性があります。
  • 低レベル制御: KeyListeners は低い抽象化レベルで動作するため、Swing アプリケーションにはあまり適していません。

解決策: DocumentFilter

より良いアプローチは、DocumentFilter を利用することです。この Swing コンポーネントを使用すると、テキスト コンポーネントのコンテンツをフィルタリングして、入力できる内容を正確に制御できます。

仕組み:

DocumentFilter を使用すると、以下のことが可能になります。テキストコンポーネントのコンテンツに加えられた変更を検査します。変更された文字列が有効な整数を表しているかどうかを確認することで、変更を受け入れるか拒否することができます。

実装例:

次のコード スニペットは、変更を実装する方法を示しています。入力を整数に制限する DocumentFilter:

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

public class MyIntFilter extends DocumentFilter {
    @Override
    public void insertString(FilterBypass fb, int offset, String string,
                            AttributeSet attr) throws BadLocationException {
        Document doc = fb.getDocument();
        StringBuilder sb = new StringBuilder();
        sb.append(doc.getText(0, doc.getLength()));
        sb.insert(offset, string);

        if (test(sb.toString())) {
            super.insertString(fb, offset, string, attr);
        } else {
            // Handle invalid input, e.g., display an error message
        }
    }

    private boolean test(String text) {
        try {
            Integer.parseInt(text);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
}
ログイン後にコピー

この DocumentFilter をJTextField を使用すると、有効な整数のみが入力として許可されるようにすることができます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート