to.tetramorph.starbase.formatter
クラス GregorianDateFormatter

java.lang.Object
  上位を拡張 javax.swing.JFormattedTextField.AbstractFormatter
      上位を拡張 to.tetramorph.starbase.formatter.AbstractFormatter
          上位を拡張 to.tetramorph.starbase.formatter.GregorianDateFormatter
すべての実装されたインタフェース:
Serializable

public class GregorianDateFormatter
extends AbstractFormatter

入力は全角数字でも半角数字でもどちらでも受け付ける。
不正な日付(11月31日とかうるう年ではない2月29日)を入れるとエラーとみなし メッセージダイアログが出て入力は消去される

 "19640930"   8桁の数字で指定する方法。(全角でも良い。
 "1964-9-30"  年月日の順番で区切って指定。セパレータは数字以外ならなんでも良い。
 "BC 500-9-30  紀元前は先頭にBCをつけて指定。ADも指定できるがあまり意味はない。
"紀元前 500-9-30  BCの変わりに紀元前も可。
"s39-09-30"  頭にs(大小区別なし)をつけると昭和年と認識する。 "s390930"   同様。 "jd2382838" ユリウス日で入力 "昭和41年(1966)9月24日" 括弧は無視して昭和をG暦に変換し認識する。 "1995年(平成7年) 1月17日 5時46分" 括弧や空白は無視して正しく認識する。
和暦は昭和しか対応していない。将来的にはもっと対応したい。厳密な切替日のデータ を用意しなければならないのだが、それがまだ。 余談だがJFormatedTextFieldにFormatterをセットしたとき、フィールドに対して未入力 の状態でgetValue()を呼び出すと、nullが返る。Formatterでnullを返さない stringToValueを実装していたとしてもである。一度フォーカスが移り、再びフォーカス がはなれ、未入力という場合は違うが、まったくの未入力のときはFormatterの実装に関 係なくnullが返る。
したがってFormatter側で、nullが返らない仕様にすることは無理と心得よ。getValue() してnull判定してnullなら""を返すなどの処理をすること。それからJTextFieldの getText()は、未入力のとき""を返す。
 次のようにしてフォーマッタをセットする。FormatterFactoryをかます必要がある。
 dateFTextField1.setFormatterFactory(new FormatterFactory(new GregorianDateFormatter()));
 

関連項目:
直列化された形式

コンストラクタの概要
GregorianDateFormatter()
          普通のコンストラクタ
GregorianDateFormatter(JFormattedTextField timeFTextField)
          これで作ると、カンマで区切った時刻文字列をリレーする。
 
メソッドの概要
static void main(String[] args)
           
 void setTimeZone(TimeZone timeZone)
          タイムゾーンを登録する。
 Object stringToValue(String text)
          日付の文字列表現を解釈してGregorianCalendarオブジェクトを返す。
 String valueToString(Object value)
          GregorianCalendarオブジェクトから、その文字列表現を返す。
 
クラス to.tetramorph.starbase.formatter.AbstractFormatter から継承されたメソッド
zenkakuToANK, 括弧除去
 
クラス javax.swing.JFormattedTextField.AbstractFormatter から継承されたメソッド
clone, getActions, getDocumentFilter, getFormattedTextField, getNavigationFilter, install, invalidEdit, setEditValid, uninstall
 
クラス java.lang.Object から継承されたメソッド
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

GregorianDateFormatter

public GregorianDateFormatter(JFormattedTextField timeFTextField)
これで作ると、カンマで区切った時刻文字列をリレーする。 時刻フィールドを指定しておくと、"1964-09-30,5:35"などと入力したとき、時刻の "5:35"の部分をtimeFTextFieldに送る仕組み。まとめていれたい場合もある。


GregorianDateFormatter

public GregorianDateFormatter()
普通のコンストラクタ

メソッドの詳細

setTimeZone

public void setTimeZone(TimeZone timeZone)
タイムゾーンを登録する。登録されていれば"JD xxxx"などとしてユリウス日を入力 できるようになる。デフォルトは未登録。


stringToValue

public Object stringToValue(String text)
                     throws ParseException
日付の文字列表現を解釈してGregorianCalendarオブジェクトを返す。 MyTimeFormatterはjava.sql.Timeをやりとりするので、DateFormatterもjava.sql java.sql.Dateでやりとりしたいところだが、それだと紀元前の日付を扱えない。 そのためGregorianCalendarでやりとりする。

定義:
クラス JFormattedTextField.AbstractFormatter 内の stringToValue
例外:
ParseException

valueToString

public String valueToString(Object value)
                     throws ParseException
GregorianCalendarオブジェクトから、その文字列表現を返す。

定義:
クラス JFormattedTextField.AbstractFormatter 内の valueToString
例外:
ParseException

main

public static void main(String[] args)