[JavaFX] バリデーション機能付きTextFieldを実装する

JavaOne Tokyo 2012でJavaFXに出会ってから,JavaFXの勉強にはまってます.

ちょうど研究室用の購買部会計システムをSwingで作成中だったので,それをJavaFXで書きかえつつ勉強を進めているという感じです.

で,購買部用のシステムということで,JANを入力するTextFieldがあるのですが,JAN専用なので数字しか入力させたくありません.また,JANは13桁と決まっているので13桁以上を入力させたくもありません.

こういったとき,SwingではJFormattedTextFieldを使えば一発なのですが,現在JavaFXではそのようなクラスは存在しませんし,TextFieldのプロパティで指定することも出来ません.

はじめは#onKeyPressedとか#onKeyTypedを使ってどうにかしようとしてましたが,どうもこれらのイベントでは入力を中断させることはできなさそうです.できそうなことといえば,#lastIndexOfでインデックスを取得して削除する,とかでしょうか.

試行錯誤しつつ色々探していると,とても参考になる記事を見つけたのでそれを参考にしつつ今回の要求に沿った独自クラスを実装してみました.

Restricting Input on a TextField // JavaFX News, Demos and Insight // FX Experience

[12/04/12 16:15追記] なお,動作確認環境はJavaSE7u3 + JavaFX 2.1b19です.JavaFX 2.0では動かない…かもしれないです
続きを読む