- - PR -
JSpinnerのカンマ入力について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-30 21:49
こんにちは、はじめて投稿します。
JSpinnerのSpinnerNumberModel を使用して 実数型のスピナーで、手入力もできるものを作成したいなと思っております。 カンマ入りの数字、1,01を入力した場合にフォーカスが移動すると、 1.00という値に変換されて入ってしまいます。 これを1.01と入力できるようにしたいのです。 ご回答のほど、よろしくお願い致します。 ■今こんな感じでやっております SpinnerNumberModel model1 = new SpinnerNumberModel(0.1, 0.1, 10.0, 0.1); model1.addChangeListener(this); JSpinner spinner1 = new JSpinner(model1); JSpinner.NumberEditor editor = new JSpinner.NumberEditor(spinner1, "0.0"); spinner1.setEditor(editor); add(spinner1); | ||||||||
|
投稿日時: 2007-01-31 11:31
JDK添付のソースを見ると入力した文字列から値に変換しているのは
JSpinner.setEditor()で設定されたJComponentのようです。 SpinnerNumberModelを使っている場合にはデフォルトでは JSpinner.NumberEditorが設定されるようですね。 NumberEditorではjava.text.DecimalFormatでフォーマット変換しているようです。 この際、システムのデフォルトのロケールでのパターンを扱っているようなので ロケールをフランスなどにすれば小数点がカンマのフォーマットになるようですね。 JSpinner.NumberEditorはJSpinner.DefaultEditorを継承していますので DefaultEditorのソースを参考にして自作したEditorを JSpinner.setEditor()してやれば独自のフォーマット変換させることが できるようになると思います。 | ||||||||
|
投稿日時: 2007-02-06 19:00
ご返答頂きありがとうございました。
カンマ入力の件は、NumberEditorを使用して下記のように記述し解決しました。 助かりました。 JSpinner spinner1 = new JSpinner(); SpinnerNumberModel model1 = new SpinnerNumberModel(1.0, 0.0, 10.0, 1.0); this.spinner1.setModel(model1); JSpinner.NumberEditor editor = new JSpinner.NumberEditor(spinner1); editor = new JSpinner.NumberEditor(spinner1, "0.0"); this.spinner1.setEditor(editor); しかし、まだ問題があり今回の仕様で、スピナーのフィールド内に入力された値を拾ってきて「設定ボタン」との組み合わせで動作させなければいけなく、 不正文字(アルファベット、かな入力など)が入力された時に、設定ボタンが押下されたら"不正な文字が入力されてます"というようなエラーメッセージを出したいのですが、JSpinnerに、はじめから備わっている機能だと、不正文字が入力された時カーソルが移動されると、不正文字を自動で削除する為エラーメッセージを出す間もないのです。 不正文字で入力された値がカーソル移動されても削除されずに、フィールド内に残しておきたいのです。 実現したい事が似てるもので、Excelの印刷機能のページ指定にあるスピナーのようにやりたいです。フィールド内にアルファベットを入力して「OKボタン」を押下すると、「整数が正しくありません」というダイアログでのメッセージがでます。 こんなふうにできたらなと思っております。 ご回答のほど、よろしくお願い致します。 | ||||||||
|
投稿日時: 2007-02-06 22:50
ソースを読めばわかると思いますが、「1.01と入力できるようにしたい」は、
こうするだけでよいのでは? 単なるjava.text.DecimalFormatなんですから。
javax.swing.JSpinner.DefaultEditorのソースを読んでください。 特にgetTextField()の箇所をじっくりと。 |
1