isami100のSwingin' Seasar日記

2004-07-02

フォーマッタの作成(続き)

次は、日付用のフォーマッタを作成。今度は編集用のフォーマットと表示用のフォーマットを分けるため、DefaultFormatterFactoryを使います。

Formatter.dicon


"http://www.seasar.org/dtd/components.dtd">
<components namespace="Formatter">
    <!-- Interceptors -->
    <component name="nullFormatInterceptor" class="s2study.ui.NullFormatInterceptor"/>

    <!-- Code -->
    <component name="fmtCode4" class="java.text.DecimalFormat">
        <arg>"0000"</arg>
        <property name="maximumIntegerDigits">4</property>
        <aspect pointcut="parseObject">nullFormatInterceptor</aspect>
    </component>

    <!-- Date -->
    <component name="fmtDateWithSlash" class="java.text.SimpleDateFormat">
        <arg>"yyyy/MM/dd"</arg>
        <aspect pointcut="parseObject">nullFormatInterceptor</aspect>
    </component>
    <component name="fmtDateWithoutSlash" class="java.text.SimpleDateFormat">
        <arg>"yyyyMMdd"</arg>
        <aspect pointcut="parseObject">nullFormatInterceptor</aspect>
    </component>
    <component name="fmfDate" class="javax.swing.text.DefaultFormatterFactory">
        <property name="displayFormatter">
            <component name="ftrDateWithSlash" class="javax.swing.text.DateFormatter">
                <arg>fmtDateWithSlash</arg>
           </component>
        </property>
        <property name="defaultFormatter">
            <component name="ftrDateWithoutSlash" class="javax.swing.text.DateFormatter">
                <arg>fmtDateWithoutSlash</arg>
           </component>
        </property>
    </component>
</components>

表示用はスラッシュ付き、編集中はスラッシュなしでフォーマットされるようにします。ネーミングが少し分かりづらいですが--;

テキストフィールドには、プロパティでインジェクションします。

EmployeeRefFrame.dicon(変更箇所のみ)
    <component name="lblHireDateFrom" class="s2study.ui.SLabel">
        <arg>"HIRE DATE between"</arg>
    </component>
    <component name="txfHireDateFrom" class="s2study.ui.SFormattedTextField">
        <property name="formatterFactory">fmfDate</property>
    </component>
    <component name="lblHireDateTo" class="s2study.ui.SLabel">
        <arg>"and"</arg>
    </component>
    <component name="txfHireDateTo" class="s2study.ui.SFormattedTextField">
        <property name="formatterFactory">fmfDate</property>
    </component>