- PR -

JSpinnerでの入力制限について

1
投稿者投稿内容
たけしゃん
会議室デビュー日: 2006/11/09
投稿数: 2
お住まい・勤務地: 東京在住
投稿日時: 2006-11-09 17:50
はじめて投稿します。

現在、Swingで簡単なカレンダーを作成しています。
Windowsのタスクスケジューラーのような感じには作成できたのですが、JSpinnerを用いて表現している部分がテキスト編集できてしまいます。

■やりたい事
・年のJSpinner「2006」では半角の数字以外は入力させたくない。
・年のJSpinner「2006」では1977から2999の範囲外の数字が入力されたら最大、最小値にしたい。
・時刻JSpinner「17:25」では「:」の左右の時間、分毎にスピナで数字を変更したい。
・時刻JSpinner「17:25」では時間、分毎に最大、最小値を設定したい。

これらの事を実現するためにはどんなコードを書けばよいでしょうか。
Webで調査した感じだと、
・JFormattedTextField
・Formatter
・JSpinner.DataEditor
などのキーワードが出てくるのですが、JFormattedTextFieldでの制限方法などしか触れられていません。

よろしくお願いします。
nekoyama
ベテラン
会議室デビュー日: 2005/03/12
投稿数: 71
投稿日時: 2006-11-09 18:22
引用:

たけしゃんさんの書き込み (2006-11-09 17:50) より:
はじめて投稿します。

■やりたい事
・年のJSpinner「2006」では半角の数字以外は入力させたくない。

JSpinner.DateEditorに日付フォーマットを設定して、そのエディタをJSpinnerに
設定することで入力制限可能です。

・年のJSpinner「2006」では1977から2999の範囲外の数字が入力されたら最大、最小値にしたい。

SpinnerDateModel(Date value, Comparable start, Comparable end, int calendarField)で上限、下限値を設定して、そのSpinnerModelをJSpinnerに
設定することで可能です。


・時刻JSpinner「17:25」では「:」の左右の時間、分毎にスピナで数字を変更したい。

JSpinner.NumberEditorに日付フォーマットを設定して、そのエディタをJSpinnerに
設定することで入力制限可能です。時間、分を個別に設定する場合、
エディタのフォーカスを制御する必要があります。

・時刻JSpinner「17:25」では時間、分毎に最大、最小値を設定したい。

SpinnerDateModel(Date value, Comparable start, Comparable end, int calendarField)で上限、下限値を設定して、そのSpinnerModelをJSpinnerに
設定することで可能です。

これらの事を実現するためにはどんなコードを書けばよいでしょうか。

具体的なコードは、上記を元に調べてください。
よろしくお願いします。

たけしゃん
会議室デビュー日: 2006/11/09
投稿数: 2
お住まい・勤務地: 東京在住
投稿日時: 2006-11-10 17:46
返信ありがとうございます。

引用:
--------------------------------------------------------------------------------
・年のJSpinner「2006」では半角の数字以外は入力させたくない。

JSpinner.DateEditorに日付フォーマットを設定して、そのエディタをJSpinnerに
設定することで入力制限可能です。

・年のJSpinner「2006」では1977から2999の範囲外の数字が入力されたら最大、最小値にしたい。

SpinnerDateModel(Date value, Comparable start, Comparable end, int calendarField)で上限、下限値を設定して、そのSpinnerModelをJSpinnerに
設定することで可能です。

-------------------------------------------------------------------
私の質問の仕方が悪かったのかも知れませんが、上記の事に関しては実現できています。

■現状
・スピナの上限は設定できている
・JSpinner.DateEditorでは 
 「JSpinner .DateEditor editor = new JSpinner.DateEditor(spinner, "yyyy");」
のような感じで制限も付けています。

しかし、テキストフィールドに半角以外の文字を入力することができてしまいます。

Windowsのタスクスケジューラーでは数字以外の入力も許していないのですが、どのようにすればよいでしょうか。
nekoyama
ベテラン
会議室デビュー日: 2005/03/12
投稿数: 71
投稿日時: 2006-11-11 16:28
引用:

テキストフィールドに半角以外の文字を入力することができてしまいます。


フォーカスが離れた場合、入力を許可していない文字がはじかれませんか?
それが、JSpinner.DefaultEditor(実体はJFormattedTextField)のFocusLostBehavior
プロパティのデフォルトのJFormattedTextField.COMMIT_OR_REVERTの仕様です。

もし、エディタから、フォーカスが離れるまえに入力自体をはじきたいのであれば、
JFormattedTextFieldに適切な処理を行うActionListenerを追加して、
ActionEventを監視して、JSpinner.DefaultEditorの処理をオーバーライドするか、DocumentListenerで入力自体を監視するか、JFormattedTextFieldのDocumentにDocumentFilterを追加して入力自体を監視します。

または、自作のエディタを作成して組み込みます。

1

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