isami100のSwingin' Seasar日記

2004-07-07

祝!さよならラッパー軍団

Swingのラッパを作らなくてもS2上で動かせるようになりました。ひがさんありがとう!\(^^)/

で、いろいろとリファクタリングしました。以下変更点を羅列。ソースこちらにまとめました。

他に何かあったかな。。。

思い出した。

従業員照会で、empNoのフォーマットをJFormattedTextField(Format)コンストラクタでインジェクションするようにしていたのですが、なぜかJFormattedTextField(Object)の方に入ってしまい、次のようなエラーに。

Caused by: java.lang.IllegalArgumentException: Cannot format given Object as a Number
	at java.text.NumberFormat.format(NumberFormat.java:219)
	at java.text.Format.format(Format.java:133)
	at javax.swing.text.InternationalFormatter.valueToString(InternationalFormatter.java:291)
	at javax.swing.JFormattedTextField$AbstractFormatter.install(JFormattedTextField.java:857)
	at javax.swing.text.DefaultFormatter.install(DefaultFormatter.java:105)
	at javax.swing.text.InternationalFormatter.install(InternationalFormatter.java:268)
	at javax.swing.JFormattedTextField.setFormatter(JFormattedTextField.java:432)
	at javax.swing.JFormattedTextField.setValue(JFormattedTextField.java:703)
	at javax.swing.JFormattedTextField.setValue(JFormattedTextField.java:469)
	at javax.swing.JFormattedTextField.<init>(JFormattedTextField.java:258)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
	at org.seasar.framework.util.ConstructorUtil.newInstance(ConstructorUtil.java:29)

ラッパーを作っていたときは、Objectを引数に取るコンストラクタを定義していなかったので、うまくいっていたようです。ではsetterで、と思ったらこのJFormattedTextFieldにはFormatのsetterがない。というわけで、日付や数値のフォーマットでやっていたように、FormatterFactoryを定義してsetterインジェクションするようにしました。