最初に行うことは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
ですか? デフォルトの動作では、フォーカスが失われ、フォーマッタが適用され、入力が検証されると予想していました。しかし、そうではないことは明らかです。