2009-03-04 44 views
3

私はInteger変数にバインドされたテキストフィールドを持っているので、ユーザーがこのフィールドにnumberを入力すると、バインディングメカニズムは自動的にテキストをIntegerに変換し、この値をvarに設定します。問題は、ユーザーがテキストをテキストフィールドに入力するため、そのバインディングメカニズムは値のみを変換しているため、ユーザーがテキストを入力すると、テキストフィールド内に正当な値が存在しないため、バインディングがアクティブになりません。私がこのような状況で必要とするものは、バインディングはnull値で変更をトリガしなければならないので、Integer varにnullがあります。JavaバインディングJTextField - > java.lang.Integerの問題

したがって、このフィールドを空白にしたり、数値でないものを残しておくと、バインディングはnull値の伝播をトリガーする必要があります。イベントを無視しないで...テキストフィールドでイベントをプログラムすることなく、どうすればいいですか?

Javaバインディングはデフォルト動作を変更できますか?

答えて

0

バインディングメカニズムの動作を変更するだけでなく、数値を受け入れるTextFieldにFormatterを配置することもできます。このためにjavax.swing.text.DefaultFormatterを拡張する必要があります。そして、通常のJTextFieldの代わりにJFormattedTextFieldを使用します。

結果として、テキストフィールドに有効な入力が得られ、不正な値から何かを作成する必要はありません。

+0

テキストフィールドの最後の文字をユーザーが削除するまで機能しますが、Integerは最後の正当な状態に留まり、nullにはなりません –

1

制限付きテキスト入力のスイングサポートは面倒です。 JFormattedTextFieldはあなたに全く悲惨なユーザーエクスペリエンスを与えます。最も興味深いSwingの作業と同様に、JComponentを無視してモデルを探してください。この場合、Document、特にDocumentFilterです。

私は以前に作成した整数に制限されたテキストフィールドを使用する単純なSwingアプリケーションを持っています。 Description.Source(特にcreateNumberDocumentを参照)。

関連する問題