Q31:数値入力フィールドの最大桁数を指定することは出来ないのか。
Q31-1:
テキストフィールドでは、属性情報設定の項目に、MaxCharInputCountが存在し、最大桁数を設定出来ますが、数値入力フィールドには、そのような項目がありません。文字を入力している際、設定した桁数を超える数字はそれ以上、入力できないといったようなことがしたいです。
A31-1:
まず、[数値入力フィールド]の入力・値確定時の動作についてご説明します。
[テキストフィールド]とは少し違った動作になります。
[数値入力フィールド]では入力しただけでは、表示されている値は確定していません。
値確定のタイミングは
@フォーカスが数値入力フィールドから外れた時
A数値入力フィールド内でEnterキーが押された時
B「現在表示されている文字列で値を確定する/commitEdit()」
「文字列を設定した後、その文字列で値を確定する/commitText(String)」
のメソッドを実行した時
の3点です。
但し、Aの時に確定できない値であった場合でも、エラーメッセージは出ません。
@ではデフォルトでは入力値が確定できない値であった場合には、元の値に表示が戻ります。(設定によって変更ができます)
[数値入力フィールド]に最大値/最小値を設定できますが、これは確定された値に関してということになります。入力・表示だけでしたら制限を属性情報等から行うことはできません。
確実に入力制限を行いたい場合には、[マスク入力フィールド]をお使い下さい。簡単には「コンポーネント属性情報設定」の「Mask」欄に例えば「###」と入れると、3桁以下の数字のみが入力できるようになります。
入力形式指定方法については付属の「MZ Platform Javadoc」に詳しく書いてありますので、どうぞご覧下さい。
[マスク入力フィールド]も値確定のタイミングに関してご注意下さい。[数値入力フィールド]と同様です。
「setText」の際の引数は文字列型、「getValue()」も日本語別名「テキストを取得する()」としてある通り、戻り値は文字列型です。
入力が文字列型のため、文字の配置方法を「右端」とした時にはカーソルは一文字目の左側に点滅するのですが、矢印キーで無理に右端にすると入力ができなくなります。
Q31-2:
[マスク入力フィールド]を扱い、マスク設定を「#」で設定をし、処理を見たところ、数値だけの入力は、可能になりましたが、全角の数値も入るのが分かりました。
半角だけの入力可にしたいので、[数値入力フィールド]に、最大値を設定して利用したいと思います。
A31-2:
[マスク入力フィールド]について補足致します。
半角数字のみを入力したい場合には、マスクの設定はそのままで、
setValidCharacters(String) あるいはsetInvalidCharacters(String) をお試し下さい。
特に数字の場合は指定しなければならない文字の数が限られていますから、有効かと存じます。
上記メソッドを実行した後、全角数字を入力しエンターキーを押すと入力はすぐに消えてしまいます。
数値入力フィールドの場合はエンターキーを押しても、フォーカスが移動しない限り入力が有効だったかどうか(消えてしまうかどうか)は判明しませんので、ご留意下さい。
Q31-3:
試したところ、半角文字だけ入力可能になりました。
しかし、処理を試したところ、他に不明な点が上がりました。DELETEキーを押すと、空白文字が入ってしまいます。また、「###」と設定したところ、必ず3文字入力しなければ、以前入力した数値がフォーカスを抜けた際に表示されます。色々、試したのですが設定方法が分かりません。
A31-3:
ご指摘の通り、マスク入力フィールドは郵便番号のように決まった文字数の入力には便利なのですが、マスクの長さより短い文字列は確定されません。
文字列の長さがマスクの長さより短い場合には、代わりの表示文字列を設定しておくというぐらいしかできません。
入力数字の桁数が小さい場合には[数値入力カウンタ]をお試し頂いてもよろしいかと存じます。
数値入力フィールドの場合は、表示されている数字と確定されている数値の相違にご留意下さい。最大値以上の数字やアルファベットも表示だけならキーボードから入力されてしまいます。
表示されている文字列が有効かどうかはメソッド「isEditValid()」で判定することができます。
フォーカスを失った後の動作はFocusLostBehaviorのモードにより以下のように変わります。
0:値を確定。確定できない場合でも表示はそのまま
1:値を確定。確定できない場合は現在の値に表示を変更。デフォルト値
2:表示されている文字列のまま(値は確定されない)
3:現在の値に表示を変更
以上どうぞご検討下さい。
備考:「数値入力フィールド」の「Q&A1」にも掲載。