Sample : データを独自形式にてフォーマット表示
実装サンプル : 2_3.保持データを独自形式にてフォーマット表示
プログラム内部データでは 「20071231」 と保持しているものを、
GUI表示上では「2007/12/31」と表示する
という要件が合った場合、
実装方法としては
『文字整形して 別のデータ領域(アイテム)に保持したものを表示する』
という方法が考えられますが、これとは別に
『別のデータ領域(アイテム) を作成することなく、文字整形する』
方法として 「表示変換クラス(フォーマットクラス)」というものが提供されています。
「表示変換クラス(フォーマットクラス)」を使うと、 ”無駄なデータ領域を作成をしなくてもよい” だけでなく、 ”プログラムで扱うデータ形式 と 表示上のデータ形式を 切り離す”ことができるため、 実装もスマートになる という利点があります。
このドキュメントでは「表示変換クラス(フォーマットクラス)」を使った実装方法を
中心にご紹介します。
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
のメソッドを実装します。
設定内容
- DMC/データの[表示変換クラス][表示変換パターン]を設定
- CAMC/アイテムの[基本データ]に設定したDMC/データ を設定
- CAMC/コンポーネントに DefaultTextField のGUI部品を追加
- CAMC/アイテムの[コンポーネント]に上記TextFieldを設定
[公式Document] 基本クラス / 表示変換クラス
[製品Class] jp.ne.mki.wedge.data.format.WedgeDateFormat
[製品Class] jp.ne.mki.wedge.data.format.WedgeDecimalFormat
java.text.SimpleDateFormat
java.text.DecimalFormat
常にフォーマット表示↑top
常にフォーマット表示(Key入力のタイミングでもフォーマット表示)したい場合には、 FormattedTextField の MaskFormatter を使用します。
DMC/データの[表示変換クラス] に "日付MASKフォーマット" (製品標準提供)
DMC/データの[表示変換クラス] に "yyyy年MM月dd日"
を設定した場合、
GUI表示上は ____年__月__日 と表示されます。
日付を入力 2007年12月31日 した後、フォーカスを移動すると内部データには
"20071231" が格納されます。
MaskFormatter の場合は、内部データ格納形式を フォーマット文字列と同じにすることも可能で、 内部データ形式 = フォーマット文字列 かどうか? は MaskFormatterクラスの仕様に依存します。
設定内容
- DMC/データの[表示変換クラス][表示変換パターン]を設定
- CAMC/アイテムの[基本データ]に設定したDMC/データ を設定
- CAMC/コンポーネントに FormattedTextField のGUI部品を追加
- 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