- PR -

JSpinnerのカンマ入力について

1
投稿者投稿内容
未記入
会議室デビュー日: 2006/05/02
投稿数: 2
投稿日時: 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);
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-01-31 11:31
JDK添付のソースを見ると入力した文字列から値に変換しているのは
JSpinner.setEditor()で設定されたJComponentのようです。

SpinnerNumberModelを使っている場合にはデフォルトでは
JSpinner.NumberEditorが設定されるようですね。

NumberEditorではjava.text.DecimalFormatでフォーマット変換しているようです。
この際、システムのデフォルトのロケールでのパターンを扱っているようなので
ロケールをフランスなどにすれば小数点がカンマのフォーマットになるようですね。

JSpinner.NumberEditorはJSpinner.DefaultEditorを継承していますので
DefaultEditorのソースを参考にして自作したEditorを
JSpinner.setEditor()してやれば独自のフォーマット変換させることが
できるようになると思います。
未記入
会議室デビュー日: 2006/05/02
投稿数: 2
投稿日時: 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ボタン」を押下すると、「整数が正しくありません」というダイアログでのメッセージがでます。
こんなふうにできたらなと思っております。
ご回答のほど、よろしくお願い致します。
nekoyama
ベテラン
会議室デビュー日: 2005/03/12
投稿数: 71
投稿日時: 2007-02-06 22:50
ソースを読めばわかると思いますが、「1.01と入力できるようにしたい」は、
こうするだけでよいのでは?
単なるjava.text.DecimalFormatなんですから。
引用:

(修正前)
JSpinner.NumberEditor editor = new JSpinner.NumberEditor(spinner1, "0.0");
(修正後)
JSpinner.NumberEditor editor = new JSpinner.NumberEditor(spinner1, "0.00");



引用:

しかし、まだ問題があり今回の仕様で、スピナーのフィールド内に入力された値を拾ってきて「設定ボタン」との組み合わせで動作させなければいけなく、
不正文字(アルファベット、かな入力など)が入力された時に、設定ボタンが押下されたら"不正な文字が入力されてます"というようなエラーメッセージを出したいのですが、JSpinnerに、はじめから備わっている機能だと、不正文字が入力された時カーソルが移動されると、不正文字を自動で削除する為エラーメッセージを出す間もないのです。

不正文字で入力された値がカーソル移動されても削除されずに、フィールド内に残しておきたいのです。
実現したい事が似てるもので、Excelの印刷機能のページ指定にあるスピナーのようにやりたいです。フィールド内にアルファベットを入力して「OKボタン」を押下すると、「整数が正しくありません」というダイアログでのメッセージがでます。
こんなふうにできたらなと思っております。
ご回答のほど、よろしくお願い致します。


javax.swing.JSpinner.DefaultEditorのソースを読んでください。
特にgetTextField()の箇所をじっくりと。
1

スキルアップ/キャリアアップ(JOB@IT)