0

コードでこれを行うにはどうすればよいですか? a を使用できることはわかっていますが、 s もこれを実行できるJFormattedTextFieldように独自のライブラリを作成しています。JTextField私が試した方法は次のとおりです。

  1. OnKeyRelease: はい、これは私が見つけた最良の方法です。必要なすべての文字を "" に置き換えました。しかし、それはちょっと遅いです。つまり、キーが押されたときに禁止された文字が表示され、キーが離されたときにそのイベント名と同じように文字が削除されます。それは私を悩ませます。
  2. evt.consume: このメソッドが、Backspace、Home などの数字と文字以外で機能する理由がわかりません。このメソッドを数字や文字でも機能させる方法はありますか?

手がかりやリンクを教えていただければ幸いです、ありがとう:)

4

1 に答える 1

1

手がかりやリンクを教えていただければ幸いです、ありがとう:)

テキスト コンポーネントの機能 - ドキュメント フィルターの実装 はどうですか?

ドキュメント フィルタを実装するには、 のサブクラスを作成し、クラスで定義されたメソッドDocumentFilterを使用してドキュメントにアタッチします。setDocumentFilterAbstractDocument

これは役立つかもしれません:

public class NoAlphaNumFilter extends DocumentFilter {
    String notAllowed = "[A-Za-z0-9]";
    Pattern notAllowedPattern = Pattern.compile(notAllowed);
    public void replace(FilterBypass fb, int offs,
                        int length, 
                        String str, AttributeSet a)
        throws BadLocationException {

        super.replace(fb, offs, len, "", a); // clear the deleted portion

        char[] chars = str.toCharArray();
        for (char c : chars) {
            if (notAllowedPattern.matcher(Character.toString(c)).matches()) {
                // not allowed; advance counter
                offs++;
            } else {
                // allowed
                super.replace(fb, offs++, 0, Character.toString(c), a);
            }
        }
    }
}

これを に適用するにはJTextField:

((AbstractDocument) myTextField.getDocument()).setDocumentFilter(
  new NoAlphaNumFilter());
于 2013-06-07T15:22:53.007 に答える