- - PR -
JSpinnerでの入力制限について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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での制限方法などしか触れられていません。 よろしくお願いします。 | ||||
|
投稿日時: 2006-11-09 18:22
| ||||
|
投稿日時: 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のタスクスケジューラーでは数字以外の入力も許していないのですが、どのようにすればよいでしょうか。 | ||||
|
投稿日時: 2006-11-11 16:28
フォーカスが離れた場合、入力を許可していない文字がはじかれませんか? それが、JSpinner.DefaultEditor(実体はJFormattedTextField)のFocusLostBehavior プロパティのデフォルトのJFormattedTextField.COMMIT_OR_REVERTの仕様です。 もし、エディタから、フォーカスが離れるまえに入力自体をはじきたいのであれば、 JFormattedTextFieldに適切な処理を行うActionListenerを追加して、 ActionEventを監視して、JSpinner.DefaultEditorの処理をオーバーライドするか、DocumentListenerで入力自体を監視するか、JFormattedTextFieldのDocumentにDocumentFilterを追加して入力自体を監視します。 または、自作のエディタを作成して組み込みます。 |
1