Q12:日付入力フィールドを抜ける際(フォーカスアウト)、入力されている値が期待値と違う場合にフォーカスアウトを抑止し、編集が確定するまで処理の入力を促したい。
Q12-1:
フォーカスアウト時のチェック処理につきまして、下記問題をご相談させて下さい。
【実現したいこと】
日付入力フィールドを抜ける際(フォーカスアウト)、入力されている値が期待値と違う場合にフォーカスアウトを抑止し、編集が確定するまで処理の入力を促したい。
【問題点】
抑止MSGが3回表示される
※フォーカスアウトの制御が上手くいかない
【添付資料】
~~~~~~~~
処理の流れを簡略化したアプリを添付に付けております。
【アプリ実施例】
指定納期1からフォーカスアウト
色々試してみたのですが、なぜフォーカスアウト処理が3回行われるか解決出来ません。
関連ファイル:MSGが3回表示される.zip
A12-1:
フォーカスの移動が、少なくとも
・[日付入力フィールド]からフォーカスが外に出る時
・モーダル画面であるメッセージダイアログ表示時
・マウスで「OK」ボタンをクリックする時
と複数回発生しているため、「入力フォーカスを設定する()」処理でフォーカスを戻しても、またフォーカスの移動が起こることが原因と推測されます。
解決策としては「matches(String)」の判定処理を通ってメッセージダイアログを表示させないよう、matchesの正規表現に適った文字列に[日付入力フィールド]の表示文字列を書き換えることが考えられます。
(関連ファイル:日付入力フォーカスA.mzax)
論理値による制御で入力の内容を書換えずにフォーカスだけ戻す例も掲載致します。(関連ファイル:日付入力フォーカスB.mzax)
[日付入力フィールド]のFocusuLostBehaviorは「3」にしていらっしゃいましたが、「0」(= COMMIT)で試しています。
動作環境や今後のJavaバージョンの変更による違いも懸念しておりますので、ファイルの内容をご検討頂き、ご不明な点、ご要望等ございましたら、ご連絡いただければ幸いです。どうぞよろしくお願い申し上げます。
関連ファイル:日付入力フォーカスA.mzax、日付入力フォーカスB.mzax