ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

Javaの画面表示-その14:AWT,Swing,SWTによる複数画面方法のまとめ

2006-10-27 14:53:06 | JavaとWeb

シリーズJavaの画面表示のつづきです。
Javaの画面作成方法として、AWT,Swing,SWTを今までやってきました。
そして、それを通して、これらは、大体同じ方法できるということを示しました。

今回は、それらの画面表示における、共通的な方法と相違点、さらにBREWまでも含めた共通点について、考えてみたいと思います。




■画面作成における共通の考え方
 JAVAアプリで行う画面出力、すなわちAWT,Swing,SWTを使って、とくに、複数画面を表示する場合は、大きく、

(1)アプリ全体のクラス
(2)各画面のクラス

の2つに分かれます(BREWでも、同様な区別をします)
 このとき、各画面間のデータを読み書きするため、

(3)(画面間)共通領域

を作成します(これを、このブログでは、カオル姫方式と呼んでいます)
共通領域はJavaでは、ハッシュマップを使います
(BREWは、IKHMapというものを作りました)




■アプリ全体について
 アプリ全体のクラスでは、以下のようなメソッドを作成しました。

(1-1)アプリを起動するメソッド
  ・共通領域を生成する
  ・初期画面を呼び出す
  →Javaでは、main,BREWではアプリ_initAppData

また、今回は作りませんでしたが、
場合によっては(BREWの場合は必須)

(1-2)アプリ終了メソッド
  →BREWではアプリ_freeAppData

を作成することもあります。

さらに、今回は触れませんでしたが、複数画面の場合は、

(1-3)複数画面間のリンク関係

を処理するメソッドも必要な場合があります(*注として、後述)

そして、これは、BREWだけなのですが
(1-4)アプリのイベント処理メソッド
  ・各画面のイベント処理メソッドを呼び出す
  →BREWではアプリ_HandleEvent
  →Javaでは、システムがやることなので「ない」
というのがあります。




■各画面について

各画面には、以下の4ないし5種類のクラスが必要です
(2-1)画面初期表示メソッド
   ・ウィンドウを作成する
   ・画面部品を作成し、ウィンドウに付ける
   ・再描画処理を呼ぶ

(2-2)イベント処理メソッド(群)
   ・各イベントごとに以下の処理
      (2-2-1)画面入力値をチェックして共通領域へ
      (2-2-2)モデルの処理を呼び出し
        →モデルは共通領域の値を元に処理
         共通領域に結果設定
      (2-2-3)再描画処理
        (2-2-3-1)現在画面の再描画
          ・再描画処理呼び出し
        (2-2-3-2)次画面へ
          ・現在画面を消す必要があれば
           現在画面の終了処理メソッド
          ・単一画面の場合は、次画面の初期化
          ・複数画面のとき、
             表示していたら、次画面の再表示
             表示してなければ次画面の初期化

     
(2-3)終了処理メソッド
   ・ウィンドウを終了
   ・メモリ解放など

(2-4)再描画処理
   ・共通領域から値をセット
   ・再表示して、フォーカス設定

(2-5)(フォーカス移動の必要があれば)
  次カーソル移動項目決定




今回の例では、Javaの場合、
(2-1)コンストラクタ&initAppData
(2-2)内部クラスの各メソッド
(2-3)freeAppData
(2-4)DispAppData
(2-5)カーソル移動はどーでもいいので「なし」

また、BREWの場合は
(2-1)各画面_initAppData
(2-2)各画面_HandleEvent
(2-3)各画面_freeAppData
(2-4)各画面_DispAppData
(2-5)各画面_NextCurItem
となります。




つまり、各クラス、メソッドについては、AWTでもSWTでもSwingでも同じようにして
作ることが可能で、違いは
・ウィンドウの作り方(フレームを呼ぶか、Display,Shellとくるかなど)
・部品とウィンドウの結びつき
・イベント処理の継承対象や、メソッド名
といった、細かい部分の書き方程度の違いということになります。

そして、BREWにおいてすら、この考え方は同じような感じです
→なので今やってる、BREWのソース自動生成をちょっといじると、
 Javaのソース自動生成ができます。

むしろ、これらと、サーブレット、Strutsのほうが、考え方は大きく違います。
といったかんじです。




*注:複数画面間のリンク関係
 ユーザーごとに、第一画面と第二画面を提供するという場合、
 この第一画面は、どの第二画面とつながっているか?
 といった判断が必要になります。

 これを処理するのが、「複数画面間のリンク関係」メソッドです。

 具体的には、全画面に、一意になるような、画面IDをふります。
 そして、画面生成や、画面間の関係を付け替えたいとき、上記関数を呼んで、
 共通領域とリンク元の画面ID,画面の種類、リンク先の画面ID,画面の種類
 を引数として渡すと、共通変数に

  キー:リンク元の画面ID_リンク先の画面の種類 
  値 :リンク先の画面ID

 と、

  キー:リンク先の画面ID_リンク元の画面の種類 
  値 :リンク元の画面ID

 の2種類のデータをいれます。
 これによって、共通領域で、自分の画面(の画面Dは分かるから)の、次の画面は
 すでに表示されているか、表示されているとすればそのIDは?というのは
  自分の画面ID_次の画面の種類

 を共通領域から探せば分かる
 (帰ってきたIDが、その対象画面、NULLなら、その画面はない)
 というものです。

 画面を消去するときは、関係がなくなるので、それらを削除するメソッドも必要に
 なり、ちとめんどうです。


この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 予想外割に他社が対抗すると... | トップ | ソフトバンクとウィルコムで... »
最新の画像もっと見る

JavaとWeb」カテゴリの最新記事