Ver1.2 RunClient Tips

2005/12/08:主に 全てを一括登録する方法を記述

  1. 共通的に独自のメッセージ(エラー)ダイアログを使用する
  2. 全ての画面の開始時に共通処理を組み込む
  3. 全ての画面のGUIコンポーネントの属性を変更する
  4. 全ての画面に共通するGUIコンポーネント,処理を一箇所にて定義する
  5. 製品以外のGUIコンポーネントを貼り付ける
  6. テーブルレンダラ、エディタの背景色、前景色を一括変更する
  7. フォーカス移動を行うKEYを追加する(デフォルトはTAB)

共通的に独自のメッセージ(エラー)ダイアログを使用する

方法1.DefaultStandardDialog クラスを作成する

jp.ne.mki.wedge.pub.client.dialog.DefaultStandardDialogを継承し、独自 のダイアログクラスを作成し、Configに設定する
リファレンスドキュメント 標準ダイアログの設定

できるようになる事

  1. ダイアログの表示形式や、ボタンのInputMapの変更などの変更が可能
  2. エンジンにて標準に表示するダイアログも変更可能になる

方法2.java.util.loggingの機能を使用しLogHandlerにてダイアログを出力する

LogRecordを独自に作成して、各ビジネスルールからログを出力する
LogHandlerを独自に作成して、対象のLogRecordの時にはダイアログを 表示するようにする
リファレンスドキュメント ログ使用方法

たとえば、 MyLogRecord(extends java.util.logging.LogRecord) のクラスを作成。
MyErrorHandler(extends java.util.logging.Handler) のクラスを作成。
MyErrorHandler では

public void publish(LogRecord record){
 if(record instanceof MyLogRecord) {
   JOptionpane.showMessageDialog(
      ((MyLogRecord)record).getOwnerFrame(), 
     ((MyLogRecord)record).getErrorMessage);
 }
}
のように記述。
ビジネスルール抽象クラスを作成し、
public void showErrorDialog(String message) {
  MyLogRecord record = new MyLogRecord(message);
  Managers.getLog().write(record);
}
というメソッドを実行する

この場合には、ダイアログ表示内容 は Handler依存にできるため、
開発時用のHandler には 開発者にとって分かりやすいメッセージを表示し、
運用時用のHandler には 運用時用のメッセージを表示し、詳細ログをファイル出力
などの切替もしやすくなります。


全ての画面の開始時に共通処理を組み込む

方法1.Load処理の1番目に共通のビジネスルールを設定する

プロジェクト共通のビジネスルールを作成し、Load処理の1番目に 設定するルール決めを行う。
共通処理の内容は そのビジネスルールの中に ハードコーディング する

方法2.ExecuteHookerを使用する since:ver1.2

ver1.2より追加されたExecuteHooker では

  1. 実行リスト開始時
    public void startUp(final ExecutionList executions, final JComponent currentComp, final Manager manager)
  2. ルール、トラン 処理開始前
    public void executeBefore(Execution execution, int index, int skipCount)
  3. ルール、トラン 処理開始後
    public void executeAfter(Execution execution, int index, int resultCode)
  4. 実行リスト終了時
    public void tearDown(int result, Manager manager)
のタイミングをトリガーして処理を組み込む事が可能になります。
ExecuteHooker は 画面単位(Manager単位) にて生成されます。
ExecuteHooker は 複数登録が可能です。
RunClient の Configにて指定すると 全ての画面(全てのManager)作成時に 指定されたExecuteHookerをインスタンスし 設定を行います。


全ての画面のGUIコンポーネントの属性を変更する

方法1.MetalThemeを使用する

javax.swing.UIDefaults にて定義されている GUIコンポーネント属性である場合、 javax.swing.plaf.metal.DefaultMetalTheme を使用し、UIDefaultsの値を予め変更する事が可能です。
作成したMetalThemeは RunClientのConfigにて設定行うことが可能です。
UIDefaultsの内容は使用するJDKのバージョンにより異なります。
何が含まれているかは

Enumeration keys = UIManager.getDefaults().keys();
while(keys.hasMoreElements()){
    String key = keys.nextElement().toString();
    Object property = UIManager.getDefaults().get(key);
    buf.append("[" + key + "] " + property + "\n");
}
で確認することができます。

MetalThemeのサンプル

import javax.swing.UIDefaults;
import javax.swing.plaf.ColorUIResource;
import javax.swing.plaf.metal.DefaultMetalTheme;

public class SampleMetalTheme extends DefaultMetalTheme {

private final ColorUIResource secondary3 = new ColorUIResource(255, 255, 250);
protected ColorUIResource getSecondary3() { return secondary3; }

public void addCustomEntriesToTable(UIDefaults table) {
    table.put("TextField.background", Color.cyan); //TextFieldの背景色を変更
    table.put("TextField.foreground", Color.darkGray); //TextFieldの前景色を変更
    super.addCustomEntriesToTable(table);
}

方法2.全ての画面の開始時に共通処理を組み込むにて行う


全ての画面に共通するGUIコンポーネント,処理を一箇所にて定義する

方法1.全ての画面の開始時に共通処理を組み込む を使用し、ルール内にて コンポーネント、アイテム、ルールをインスタンスする since:ver1.2

ver1.2RunClientから コンポーネント、アイテム、ルールを ビジネスルールにて独自にインスタンス化する 方法を公開いたします。
(コンポーネントについては、作成できるものの 種類を制限する場合もあり。現在は確認中)

方法2.画面インポート機能を使用する since:ver1.2

ver1.2RunClientから 画面インポート機能 が追加されます。
この機能は、 他のCAMC/フレームのリポジトリを、画面起動時にマージするものになります。
CAMC/アイテム は 全て追加します。
CAMC/ビジネスルール は 全て追加します。
CAMC/コンポーネント は 全て追加します。
CAMC/フレーム/Load,Open 処理は 元画面情報の "前" に追加されます。
CAMC/フレーム/Close,Dispose 処理は 元画面情報の "後" に追加されます
(その他、CAMC/フレーム 属性は インポートされません)

追加された オブジェクトは RunClient実行エンジンの Manager クラスにて追加保持されます。


重要:以下に注意してください。
  1. ToolClient上にて インポート元画面、先画面 同士でのアイテム、ルールなどの参照は行えません。
    (データ情報は 共通メモリ領域を活用するとよいでしょう。)
  2. インポート元画面、先画面 の リポジトリ定義を 別のDBにて行う場合には 内部ID の設定が重複しないように、 初期IDをずらして使用を開始してください。
    (⇒ 別DBにて 画面を作成し、 RTE形式にて 画面情報をつなげて実行するような運用の場合など)
  3. インポート元画面、先画面 同士でのアイテム、ルールなどの参照は、 Managerを介して取得は可能です。
    (つまり、ビジネスルールから インポート元画面、先画面 両方のアイテム、ルール を取得する事が可能です。)
    但し、オブジェクトを特定する手段は 「物理名」 になりますので、「物理名」が重複しないように定義を して下さい
    (*参照は可能ですが、処理の内容がリポジトリ上に現れないため 修正時の影響範囲の特定が難しくなりますので 推奨はいたしません)

*具体例

たとえば、共通画面として

を用意し、LOAD処理に
本日日付を取得して設定。
共通メモリより ログイン名称を取得して設定
を行ったものを作成します。

以下のような画面に対して、共通画面をIMPORTして実行すると、


以下のように、共通画面の コンポーネントと LOAD処理が実行されます。

画面インポートの設定は ver1.2 ToolClient の 画面の属性にて行う予定です。
(複数インポート可の予定)


製品以外のGUIコンポーネントを貼り付ける

方法1.ルールより貼り付けし、データ変更リスナーを追加する

入力がないGUIコンポーネントの場合には、ビジネスルールより GUIコンポーネントをインスタンス化し、画面に貼り付けを行います。
表示データの内容は 独自タイミング(リスナートリガー)にて行います。

アイテム変更時のイベントをトリガーしたい場合には、アイテムに対して jp.ne.mki.wedge.run.client.event.ItemEventListener を追加することにより、イベント取得も可能です。
(ItemEventListener については ver1.1にも組み込まれているが、ver1.2にて公式に提供予定。)

方法2.フレームインターフェースを使用する

入力があるGUIコンポーネントの場合には、フレーム(JFrame)自体を 独自に作成してください。
リファレンスドキュメント フレームインターフェース


テーブルレンダラ、エディタの背景色、前景色を一括変更する

方法1.TableColorSettingDelegateを使用する since:ver1.2

DefaultTable(RunClientの標準テーブル)には テーブルレンダラ、エディタの背景色、前景色の設定の 委譲クラスである TableColorSettingDelegate が設定可能です。
この委譲クラスを使用すれば、製品標準のレンダラをご使用の場合でも 反映されます。

方法2.独自に レンダラ、エディタ クラスを作成する

レンダラ、エディタ コンポーネントは 独自作成、登録が可能です。


フォーカス移動を行うKEYを追加する(デフォルトはTAB)

方法1.setFocusTraversalKeys にて追加する(Swingの機能を使用)

java.awt.Component の public void setFocusTraversalKeys(int id, Set keystrokes) より 対象の KEY を設定可能です。
Set keystrokes に、対象の KeyStroke を追加し上記メソッドで登録をします

※RunClientのConfigにて設定可能な EnterをTabと同等の動きにする 設定は、このTraversalKeyの 追加にて実装されています。
登録するタイミングは LOADのビジネスルールにて行なったり、ExecuteHookerを使用する方法もあります。

方法2.KeyをListener してフォーカス移動処理を記述する(Swingの機能を使用)

java.awt.Component の public synchronized void addKeyListener(KeyListener l) より 対象の KEY をリスナーし、フォーカス移動処理を独自にコーディングします。
この方法は、お勧めしません。特に理由がない限り 方法1 にて実装をお勧めします。

この場合は、KeyEventは必ず consume() し、フォーカス移動処理は afterの実行を行い、フォーカス移動OK の場合には invokeLater にて requestFocus を実行する処理が必要です