Sample : データを独自形式にてフォーマット表示

実装サンプル : 2_3.保持データを独自形式にてフォーマット表示

プログラム内部データでは 「20071231」 と保持しているものを、 GUI表示上では「2007/12/31」と表示する
という要件が合った場合、
実装方法としては
『文字整形して 別のデータ領域(アイテム)に保持したものを表示する』
という方法が考えられますが、これとは別に
『別のデータ領域(アイテム) を作成することなく、文字整形する』
方法として 「表示変換クラス(フォーマットクラス)」というものが提供されています。
./images/format-exp.png

「表示変換クラス(フォーマットクラス)」を使うと、 ”無駄なデータ領域を作成をしなくてもよい” だけでなく、 ”プログラムで扱うデータ形式 と 表示上のデータ形式を 切り離す”ことができるため、 実装もスマートになる という利点があります。

このドキュメントでは「表示変換クラス(フォーマットクラス)」を使った実装方法を 中心にご紹介します。

1.FocusOut時にフォーマット表示する
2.常にフォーマット表示

FocusOut時にフォーマット表示する↑top

Focusを抜けた時にGUI上の表示のみフォーマットした内容を表示する方法です。
内部保持データ は 入力時の文字列と一致します。

例えば、TextFieldにて 「20071231」と入力後、TABKeyなどによりフォーカス移動すると TextFieldの表示は 「2007/12/31」となります。
Label や 使用不可のTextField では 常に フォーマット表示 となります。

標準提供されている フォーマットクラスは 以下があります。

  • 日付フォーマット
    日付のデータ専用のフォーマットクラスです。
    表示変換パターンに[yyyy/MM/dd],[yyyy年MM月dd日],[yy/MM/dd HH:mm]などを記述します。
    記述方法は java.text.SimpleDateFormatを参照してください。
  • 数値フォーマット
    数値のデータ専用のフォーマットクラスです。
    カンマ区切り、少数桁表示桁数指定などの指定ができます。
    記述方法は java.text.DecimalFormatを参照してください。

フォーマットクラスは自作することも可能です。
[製品Class] jp.ne.mki.wedge.data.format.AbstractFormatを継承して作成します。
このパターンの場合は public String valueToString(Object value) throws ParseException のメソッドを実装します。


設定内容
  1. DMC/データの[表示変換クラス][表示変換パターン]を設定
  2. CAMC/アイテムの[基本データ]に設定したDMC/データ を設定
  3. CAMC/コンポーネントに DefaultTextField のGUI部品を追加
  4. CAMC/アイテムの[コンポーネント]に上記TextFieldを設定

常にフォーマット表示↑top

常にフォーマット表示(Key入力のタイミングでもフォーマット表示)したい場合には、 FormattedTextField の MaskFormatter を使用します。

DMC/データの[表示変換クラス] に "日付MASKフォーマット" (製品標準提供)
DMC/データの[表示変換クラス] に "yyyy年MM月dd日"
を設定した場合、 GUI表示上は ____年__月__日 と表示されます。
日付を入力 2007年12月31日 した後、フォーカスを移動すると内部データには "20071231" が格納されます。

MaskFormatter の場合は、内部データ格納形式を フォーマット文字列と同じにすることも可能で、 内部データ形式 = フォーマット文字列 かどうか? は MaskFormatterクラスの仕様に依存します。


設定内容
  1. DMC/データの[表示変換クラス][表示変換パターン]を設定
  2. CAMC/アイテムの[基本データ]に設定したDMC/データ を設定
  3. CAMC/コンポーネントに FormattedTextField のGUI部品を追加
  4. CAMC/アイテムの[コンポーネント]に上記TextFieldを設定

Maskフォーマットクラスは自作することも可能です。
jp.ne.mki.wedge.run.client.component.text.formatter.DefaultMask を継承して作成します。
このパターンの場合は 以下のメソッドを実装します。

  • public String valueToString(Object value) throws ParseException
  • public Object stringToValue(String value) throws ParseException

Valid XHTML 1.1