表示変換クラスとは、内部保持データ ⇔ 表示文字 の変換処理を行うクラスになります。
例えば、内部保持データ では 「123456789」 と保持している情報を、表示上では 「123,456,789」
と桁数カンマ区切り で 表示する事などが可能です。
表示変換クラス は、Data Management Consoleのデータ単位にて設定を行います。
例えば、桁数カンマ区切り の 単価 のデータをData Management Consoleにて作成すれば、そのデータを参照する各画面はフォーマット形式を
意識することなく実装が可能です。
また、フォーマット変更についても データ の属性を変えることにより全ての画面に反映されます。
表示変換クラスを指定することにより、編集後にフォーマット変換を自動的に行うことができます。
例えば、テキストフィールドに日付のフォーマット(yyyy/mm/dd)を指定した場合、
「20001231」と入力しフォーカスを移動すると「2000/12/31」と自動的に変換され表示されます。
また、再度フォーカスを当てると入力した状態「2001231」と表示されます。
つまりSwingJTableのレンダラ・エディタの動きを、テーブルのみならずテキストフィールドなどにも使用が可能になります。
MaskFormat を使用した場合、入力された文字 を元に 内部保持データ を作成し格納する事も可能です。
たとえば、「123456789」と入力された場合 BigDecimal型のオブジェクトに格納し、表示時には BigDecimal型から
文字列を生成して 渡す ようなことも可能です。
MaskFormatは 表示コンポーネント を DefaultFormattedTextField もしくは FormattedEditorComboBox のみ動作します。
表示変換クラスには大きく分けて2つの機能があります。
提供されているフォーマットクラスは以下の3種類です。
以下の提供クラスは MaskFormat用 クラスになります。使用時には、コンポーネントを DefaultFormattedTextField にして お使いください
提供されているフォーマットクラスは以下の3種類です。
Operation Management ConsoleのデータクラスもしくはData Management Consoleのデータ型にて設定を行います。
Operation Management ConsoleとData Management Consoleと両方設定されている場合はData Management Consoleが優先されます。
表示変換クラスは、独自に作成可能です。
作成するには jp.ne.mki.wedge.data.format.AbstractFormat を継承して作成します。
作成が必要なメソッドは以下の3つです。
以下は 表示変換クラス/Formatクラス を実装したサンプルです。
package jp.ne.mki.wedge.sample.client.formatter; import java.text.DecimalFormat; import java.text.ParseException; import jp.ne.mki.wedge.data.format.AbstractFormat; /** * Formatクラス サンプル * 数値を指定されたパターンにてフォーマットします。 * * パターンの指定は java.text.DecimalFormat にて指定できる文字を指定 して下さい。 * * @see java.text.DecimalFormat * @author Media Knowledge Technologies Co.,Ltd. */ public class SampleDecimalFormat extends AbstractFormat { /** フォーマットパターン */ private String pattern = "#,##0.###"; /** * パターンの設定 * @param String パターン */ public void applyPattern(String pattern) { if (pattern != null) { this.pattern = pattern; } } /** * パターンの取得 * @return String パターン */ public String toPattern() { return pattern; } /** * 表示データの作成 * @param Object 内部データに格納するObject * @return String テキスト上の文字列 */ public String valueToString(Object value) throws ParseException { if (value == null) { return ""; } String targetValue = value.toString(); if (targetValue.length() == 0) { return ""; } DecimalFormat formatter = new DecimalFormat(); formatter.applyPattern(pattern); try { return formatter.format(Double.parseDouble(targetValue)); } catch (NumberFormatException ne) { //数値が入力されていなかったときには入力文字をそのまま表示する return targetValue; } } }
データ型の情報など必要な場合には継承元の以下のメソッドより取得が可能です。
public String getId() public String getLogicalName() public String getPhysicalName() public int getItemType() public int getDataType() public String getDefault() public String[] getEnum() public int getLength() public int getScale() public String getMaximum() public String getMinimum() public boolean isOmit() public boolean isFix()
作成するには jp.ne.mki.wedge.run.client.component.text.formatter.DefaultMask を継承して作成します。
DefaultMaskは javax.swing.text.MaskFormatter を継承して作成されており、
valueToString、stringToValue のメソッドは javax.swing.text.MaskFormatter のメソッドを
実行しています。
そのため、指定パターンは このクラスにて使用出来る文字が指定可能になります。
(#:数字のみ、*:任意の文字 など)
詳しくは java APIリファレンス MaskFormatterを参照してください。
デフォルトの Placeholder(未入力表示)は _ (アンダーバー) が設定されています。
作成が必要なメソッドは以下の4つです。
以下は 表示変換クラス/MaskFormatクラス を実装したサンプルです。
package jp.ne.mki.wedge.sample.client.formatter; import java.text.ParseException; import java.util.regex.Pattern; import jp.ne.mki.wedge.run.client.component.text.formatter.DefaultMask; /** * MaskFormatterサンプル * ****-****** の形式にてFormatを行います。 * * 内部データは ********** (ハイフンなし) にて格納し、 * 入力時、表示時には ****-******の形式にて表示します。 * * ____-123___ などのように、途中で入力された場合は 前詰めされます。 * (123_-______ と処理されます) * * @see javax.swing.text.MaskFormatter * @author Media Knowledge Technologies Co.,Ltd. * @since webtribe/visualframe ver1.1.3 * */ public class SampleCodeMaskFormatter extends DefaultMask { /** フォーマットのパターン */ private String FORMAT_PATTERN = "****-******"; /** アンダーバーのパターン */ static final Pattern PATTERN_UNDERBAR = Pattern.compile("_"); /** 最初の桁数(4) */ private static final int FIRST_LENGTH = 4; /** * パターン文字を設定 このメソッドにて設定はできません。常に ****-****** が設定されます。 * @param パターン文字 */ public void applyPattern(final String pattern) { super.applyPattern(FORMAT_PATTERN); } /** * パターン文字を取得 * @return パターン文字 * @see jp.ne.mki.wedge.run.interfaces.DataFormatInterface#toPattern() */ public final String toPattern() { return super.toPattern(); } /** * 表示文字列を取得 * 4桁目に -(ハイフン) を挿入し、未入力箇所に _ (アンダーバー) を追加します。 * @param value 内部データ * @return 表示文字列 * @throws ParseException 解析エラー */ public String valueToString(final Object value) throws ParseException { if (value == null) { return super.valueToString(value); } else { String str = value.toString(); if (str.length() > FIRST_LENGTH) { str = str.substring(0, FIRST_LENGTH) + "-" + str.substring(FIRST_LENGTH, str.length()); } //親クラスのvalueToStringをCallすることにより未入力箇所に //Placeholder(アンダーバー)文字を設定する。 return super.valueToString(str); } } /** * 内部データ作成 * -(ハイフン)、 _ (アンダーバー) を取り除きます * @param value 表示文字列 * @return 内部データ * @throws ParseException 解析エラー */ public Object stringToValue(final String value) throws ParseException { String str = null; try { if (value == null) { return ""; } else { str = value.toString(); //ハイフンを取り除く if (str.length() > FIRST_LENGTH) { str = str.substring(0, FIRST_LENGTH) + str.substring(FIRST_LENGTH + 1); } //アンダーバーを取り除く str = PATTERN_UNDERBAR.matcher(str).replaceAll(""); return str; } } finally { str = null; } } }
データ型の情報など必要な場合には継承元の以下のメソッドより取得が可能です。
public String getId() public String getLogicalName() public String getPhysicalName() public int getItemType() public int getDataType() public String getDefault() public String[] getEnum() public int getLength() public int getScale() public String getMaximum() public String getMinimum() public boolean isOmit() public boolean isFix()
また、継承元の javax.swing.text.MaskFormatter のメソッドである getFormattedTextField() にて対象の コンポーネントが取得可能です。