ユーザーインターフェースの出来があまり良くないと感じました。入力する必要があったのです。桁ずつ指差しながら数えて金額に間違いがないことを確認しました。画面遷移するまで書式化された表示にならないのってユーザビリティとしてどうなの?他所様のシステムに文句を言いたいわけじゃないんです。自分も同じような実装をしてきたなあと反省してしまったのです。こんなユーザーインターフェースを当たり前のように作ってきました。フォーカスが外れた時にカンマ付きの書式にしているのは桁を認識しやすくするためですよね。コンピューターの都合を優先した結果ではないかと思います。書式化解除ではなく書式化したまま入力がベストという答えにたどり着くのかもしれません。書式化したまま編集できるテキストフィールドを作るというわけで作ってみましょう。書式化したまま編集できるテキストフィールドを。文字入力用ではございません。数字入力用のテキストフィールドとして以下の仕様を盛り込みます。マイナスの値は入力できません。テキストフィールドが空の状態も許容します。入力可能な桁数を指定できます。桁数にはカンマを含みません。ユーザーが入力できるのは数字のみです。カンマを含め他の文字は入力できません。数字以外の文字を除いて数字部分のみが貼り付けられます。以降の数字も取り除きます。入力されるほうが望ましいと考えたからです。カンマは常に適切な位置に自動的に表示されます。いう表示になってしまうことがないようにします。カーソル移動や範囲選択ではカンマを適切にスキップします。カンマを飛び越えるのにカーソルキーを余分に押さなくていいようにします。いう便利なクラスがあります。クラスの役割はそれだけではありません。入力フィルターとして役割があります。入力フィルターを使うことでユーザー入力に割り込んで内容を無視したり変更したりできるようになります。使って入力制御を実現していきます。UnaryOperator<TextFormatter.Change>の実装クラスを作ることになります。