2

最初に行うことはNumberFormat、自分のニーズに適した を作成することです。

this.format = NumberFormat.getIntegerInstance();
this.format.setMinimumIntegerDigits(6);
this.format.setMaximumIntegerDigits(6);
this.format.setGroupingUsed(false);

次に、それを JFormattedTextField に適用します。

this.fld_id = new JFormattedTextField(this.format);

次に、このフィールドのを次のInputVerifierように設定します。

this.fld_id.setInputVerifier(new IdVerifier());

入力IdVerifierされたテキストが正規表現に準拠していることを確認するだけです。

private class IdVerifier extends InputVerifier {
        public boolean verify(final JComponent arg0) {
            final JFormattedTextField verifyJTF = (JFormattedTextField) arg0;

            if (!verifyJTF.getText().matches("\\d{6}")) {
                return false;
            }

            return true;
        }

        public boolean shouldYieldFocus(final JComponent arg0) {
            if (!this.verify(arg0)) {
                arg0.setBackground(Color.RED);
            } else {
                arg0.setBackground(UIManager.getColor("TextField.background"));
            }

            return true;
        }
}

ただし、これを行うときは、に値を入力しますJFormattedTextField。たとえば、「1」としましょう。これは、によって「000001」に再フォーマットされNumberFormatterます。ただし、この例では、テキスト フィールドの背景はまだ赤に設定されています。

JFormattedTextFieldのフォーマットされたコンテンツがによって消費されるものであることを確認する正しい方法は何InputVerifierですか? デフォルトの動作では、フォーカスが失われ、フォーマッタが適用され、入力が検証されると予想していました。しかし、そうではないことは明らかです。

4

2 に答える 2

0

InputVerifier の定義を見ると、GUI 作業がverifyまたはshouldYieldFocusメソッド内で行われているようには見えません。InputVerifier は、フォーカスがあるフィールドから別のフィールドにジャンプするかどうかを決定することだけを目的としています。

ActionListener を JFormattedTextField にアタッチしてから、そのリスナーの本体で正規表現と赤塗りのコードを呼び出す方がよいと思います。その後、テキスト フィールドの内容が変更されるたびにチェックが行われます。

于 2013-04-24T17:51:55.080 に答える