to.tetramorph.starbase.formatter
クラス FormatterFactory
java.lang.Object
javax.swing.JFormattedTextField.AbstractFormatterFactory
to.tetramorph.starbase.formatter.FormatterFactory
public class FormatterFactory
- extends JFormattedTextField.AbstractFormatterFactory
JFormattedTextFieldに自前のフォーマッタをセットするためのラッパークラス。
NetBeansのGUIデザイナを使わないのであれば、このようなクラスは本来必要ない。
GUIデザイナは最初に必ず引数無しのコンストラクタでウィジェトのインスタンスを作成
し、後からメソッドによって必要なパラメターを設定することが前提になっている。
JFormattedTextField用に自前で用意した日付や時刻のフォーマッタがたくさんあり、
それらはJFormattedTextField.AbstractFormatterをextendsして作成されたものだ。
普通ならそれらのフォーマッタをコンストラクタで指定してJFormattedTextFieldの
インスタンスを作ればよいのだが、GUIデザイナの制約から指定することができない。
ではメソッドによってフォーマッタを後から設定してやれば良いかというと、
JFormattedTextField#setFormatter()はprotectedなので、
そのままでは同.AbstractFormatterをこのメソッドでセットすることはできない。
子クラスを作りsetFormatterをオーバーライドすればよさそうだが、
実際にやってみるとsetFormatter呼び出しと共にスタックオーバーフローのエラーを
出して設定することができない。
そこでJFormattedTextField#setFormatterFactory()を使ってセットする方法を
ためしてみたらうまくいった。
このクラスのコンストラクタに自前のフォーマッタを与えてインスタンスを作り、
それをJFormattedTextField#setFormatterFactory(..)を使ってセットする。
例
JFormattedTextField date;
date.setFormatterFactory(new FormatterFactory(new MyDateFormatter()));
クラス java.lang.Object から継承されたメソッド |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
FormatterFactory
public FormatterFactory(JFormattedTextField.AbstractFormatter fmt)
- 自前のFormatterを与えて、インスタンスを作成する。
- パラメータ:
fmt
- JFormattedTextField.AbstractFormatterをextendsして作成したフォーマッタ。
getFormatter
public JFormattedTextField.AbstractFormatter getFormatter(JFormattedTextField tf)
- JFormattedTextField.AbstractFormatterFactory#getFormatterの実装で
コンストラクタで与えられたAbstractFormatterのインスタンスを返す。
- 定義:
- クラス
JFormattedTextField.AbstractFormatterFactory
内の getFormatter
- パラメータ:
tf
- プログラマは意識する必要なし。
- 戻り値:
- フォーマッタを返す。