前へ 次へ 目次 文書セット ホーム


第 10 章

 

Java 用のデザイン


はじめに

本章では、Sun WorkShop Visual を使用して、デザインから Java コードを生成する方法について説明します。本章は、以下のように構成されています。

    1. 必要条件
    この節では、生成された Java コードを使用するために必要な条件について説明します。

    2. Java を対象とする Sun WorkShop Visual の使い方
    この節では、Sun WorkShop Visual を使用して Java 準拠のデザインを作成する方法について説明します。

    3. Java のバージョン
    この節では、Java 1.0 または 1.1 用のコードを生成する方法、および各リソースがどのバージョンの Java に適用できるかを知る方法について説明します。

    4. ウィジェット
    この節では、Java で Motif デザインを生成する方法について説明します。

    5. Java クラス用の新しいウィジェット
    この節では、Motif には対応するものがない、Java レイアウトコンポーネント用の特別なレイアウトウィジェットについて説明します。

    6. イベントモデル
    この節では、Sun WorkShop Visual で、リスナーオブジェクトを備えた Java 1.1 イベントモデルを使用する方法について説明します。初めてのユーザーのために、簡単なチュートリアルを 用意しています。

    7. 生成ダイアログ
    Java コードを生成できるよう、「コード生成」ダイアログが変更されました。

    8. 生成されたコード
    この節では、Java 用に生成されるコードについて説明します。

    9. Sun WorkShop Visual のデザインを Visaj に移行
    この節では、Java 用のビジュアルアプリケーションビルダーである Visaj に取り込める形式でデザインを保存し、Java デザインを有効に活用する方法について説明します。

    10. Motif ウィジェットから Java クラスへの対応付け - MWT ライブラリ
    この節では、Motif ウィジェットを Java クラスに対応付けるクラスのライブラリについて説明します。

Java とは何か

Java は、とりわけ C や C++ に似た要素を持つプログラム言語であり、特にインターネット環境に対応するライブラリが用意されていま す。また、Java には高度な移植性、オブジェクト指向性、およびインタプリタ機能があります。Java はスレッド化されているだけでなく、自動記憶管理機能を備え、例外を使用します。これらの用語をご存知 ない場合には、まず 「Java に関する資料」に記載する書籍をご参照ください。

生成される Java コード

Sun WorkShop Visual で生成したコードは、アプレットや通常のアプリケーションの形式にすることができます。アプレットとは 、Web ページに埋め込まれる小さなアプリケーションであり、そのページがブラウズされたときに実行されます。

生成される Java コードには何の制限もありません。つまり、Java に対応しているプラットフォームであれば、どのようなプラットフォーム上でも、何度でも使用できます。 Sun WorkShop Visual では、目的のプラットフォームとは無関係に Motif ベースのプラットフォーム上で設計できるため、生成されるコードには Motif ウィジェットを Java クラスに対応付けたクラスのライブラリがインポートされます。このライブラリは MWT と呼ばれ、Sun WorkShop Visual リリースに付属しています。Java では、クラスをパッケージにまとめることができます。MWT は uk.co.ist.mwt というパッケージに含まれています。

Motif ウィジェットから Java クラスへの対応付けの詳細については、「Motif ウィジェットから Java クラスへの対応付け - MWT ライブラリ」を参照してください。

必要条件

生成された Java コードをコンパイルし、実行するには、Java コンパイラとインタプリタが必要です。アプレット用のコードを生成する場合は、アプレットを表示するた めのアプレットビューアや HTML ブラウザも必要になります。

Sun WorkShop Visual から Java コードを生成するには、Sun WorkShop Visual で使用していたもの以外に、特別な環境変数を設定する必要はありません。しかし、生成されたコードをコ ンパイルし、実行するには、CLASSPATH 環境変数の設定が必要です。この変数は、PATH 環境変数と同様に、ディレクトリを列挙したものです。このディレクトリには、$VISUROOT /lib/java_classes が含まれていなければなりません (VISUROOT は Sun WorkShop Visual のインストールディレクトリです)。また、現作業ディレクトリ (.) など、アプリケーションで使用するクラス定義を生成したディレクトリも含める必要があります。さらに、 Java コンパイラとインタプリタが置かれているディレクトリが PATH に含まれていることも確認してください。

Java を対象とする Sun WorkShop Visual の使い方

Sun WorkShop Visual を使用して Java コードを生成する方法には、Sun WorkShop Visual を使用して C++ や Microsoft Windows のコードを生成する方法と幾分似たところがあります。その理由は、Java が C++ のようなクラスベースの言語であるためです。クラスのインスタンス化、派生クラス、およびメソッドの処 理方法は同じです。

Java 準拠デザインの作成

「モジュール」メニューには、「Java 準拠」というトグルがあります。このトグルをオンに設定すると、Java コードの生成に適したデザインにするよう Sun WorkShop Visual に指示することになります。そのデザインを Java コードで再現できない場合には、Java 準拠不良ダイアログが表示されます。

Java 準拠不良ダイアログ

Java 準拠不良ダイアログを使用すると、Java コードで再現できないデザイン部分が表示されます。このダイアログを図 10-1 に示します。

 

    図 10-1 Java 準拠不良ダイアログ

ダイアログの下に並んでいるボタンの機能は次のとおりです。

  • 移動
    Java 準拠不良ダイアログで選択状態になっているウィジェットが、デザイン内で選択状態になります。ウィジェ ットが、現在表示されていないシェル部分にある場合、または階層内の折り畳まれたセクションにある場合 には、ウィジェットが見えるように表示が変化します。

  • Java 準拠不良ダイアログでの選択部分が、ウィジェットリスト内の次の項目に移動します。
  • 修正
    ダイアログ内で選択されているウィジェットの準拠エラーの原因を修正できます。このボタンは、準拠エラ ーをこのように自動的に解決できる場合にのみ有効になります。
  • 閉じる
    ダイアログが閉じます。
  • ヘルプ
    ダイアログに関するヘルプが表示されます。

Java コードの生成に関するデザイン上の制限

Java コードに変換できないユーザーインタフェース機能を次に示します。

    1. シェルでない親を持つファイル選択ボックス。

    2. 作業領域のあるファイル選択ボックス。

    3. クラスであるファイル選択ボックス。

    ファイル選択ボックスには親としてシェルが必要です。Java にはモード付きファイル選択ボックスしかありません。

    4. メニューバーとシェル間のクラスであるウィジェット。

    この制限があるのは、シェルがメニューバーを見つけられるようにするためです。< /P>

    5. シェル内の複数のメニューバー。

    Java では、シェルにはメニューバーが 1 つしかありません。

    6. メニューのないカスケードボタン。

    Java にはカスケードボタンに相当するものがないため (メニューはメニューバーに直接追加されます)、カスケードボタンを単独で使用しても意味がありません。

    7. ポップアップメニューのあるデザイン。

    Java はポップアップメニューに対応していません。

    8. メニューバーの複数行文字列。

    メニューバーでは複数行の文字列を使用できません。他の場所では使用できます。< /P>

    9. クラスでないリンク元。

    Java では、リンク元はクラスでなければなりません。

    10. クラス内にないコールバック元。

    これは現行バージョンの AWT イベントモデルの制限であり、このモデルの開発に伴って、今後のバージョンでは改善される可能性があり ます。

    11. メニュー内のピックスマップ。

    12. メニュー内のラベル。

    13. アプレットのメインウィンドウにあるメニュー。

    Java では、11〜13 の 3 項目は使用できません。

アプレットのデザインに関する制約

アプレットには、次に示すように、いくつかのデザイン上の制約があります。

    1. アプレットには、親としてのアプリケーションシェルが必要です。

    2. アプレット自身はクラスであってはなりませんが、その直接の子はクラスであることが必要です。

    3. 1 のシェル以外は最上位シェルとしてください。

    4. すべての最上位シェルをクラスにしてください。

クラスにするかどうかの判断

Java コンパイラ使用時には、1 つのクラスメソッドに使用できる変数が 64 個以下に制限されます。すぐにはピンとこないかもしれませんが、この制限はデザインに大きな影響を与え ます。64 個というと多いように感じますが、実際にはすぐに使い切ってしまいます。この制限に到達した場合は、64 個までの変数を使用できるメソッドが増えるように、ウィジェットをクラスとして追加指定しなければなり ません。デザインがこの制限を超えている場合は、Java コードの生成時に通知されます。

ウィジェットを簡単にクラスにするには、マウスの右ボタンを押してください。「 クラス作成」など、便利なコマンドのあるメニューが表示されます。

コールバック宣言用の包含クラス

Java デザインのウィジェットには、他の種類のデザイン中のウィジェットと同様に、コールバックを与えること ができます。コールバックが (「イベントモデル」に記述するように) リスナーオブジェクトを定義する場合を除いて、コールバックはメソッドにしてください。メソッドは、ウ ィジェットを含む「包含クラス」で宣言されます。コールバックを与えられたウィジェット自身がクラスで ある場合には、コールバック・メソッドはウィジェットのクラス内で宣言されます。クラスでない場合には 、Sun WorkShop Visual は階層を検索して、クラスである最も近い祖先を探して、そのウィジェットのクラスでメソッドを宣言しま す。

Java のバージョン

デフォルトでは、Sun WorkShop Visual は Java バージョン 1.1 をサポートします。Java 1.0 のコードを生成するには、生成オプションダイアログで適切なオプションを選択してください。これについ ては、「生成されるコードの Java バージョン」を参照してください。

リソースとコールバックには、それらをサポートする Java のバージョンを示すマークが付けられます。詳細については 「リソースとコールバックのバージョン記号」を参照してください。

Java 1.1 では、イベントモデル (ウィジェット間でのメッセージの受渡し方法) が変更されました。Sun WorkShop Visual は、リスナーオブジェクトを使用することで、このモデルを完全にサポートしています。詳細については 「イベントモデル」を参照してください。

使用している Java のバージョンを調べるには、コマンド行で -version オプションスイッチを指定して Java を実行してください。こうすると、バージョンが標準出力に出力され、Java はすぐに終了します。

生成されるコードの Java バージョン

図 10-2 に示すように、Java オプションダイアログには新しいオプションメニューがあります。このメニューを使用すれば、生成される コードの Java バージョンを選択できます。

 

    図 10-2 Java オプションダイアログ

Java オプションダイアログを表示するには、「コード生成」ダイアログの Java ページにある「Java オプション ...」というボタンを押してください。

コマンド行からのコード生成には、どちらのバージョンであれ、このダイアログで 最後に選択されたバージョンが使用されます。選択が行われなかった場合には、デフォルトの「Java 1.1」が使用されます。

リソースとコールバックのバージョン記号

リソースパネルには、Java サポートを示すための 3 つの注釈記号があります。図 10-3に示すように、「1.1」というテキストが表示されたコーヒーカップは、リソースが Java 1.1 でのみサポートされることを示します。

 

    図 10-3 ポップアップメニューの Java 1.1 コアリソース

図 10-4 に示す「1.0」というテキストが表示されたコーヒーカップは、リソースが Java 1.0 でのみサポートされることを示します。テキストのないコーヒーカップは、リソースが両方のバージョンの JDK でサポートされることを示します。コーヒーカップがない場合は、リソースが Java でサポートされないことを示します。

 

    図 10-4 リソースパネルの注釈

コールバックダイアログ内のコールバックにも注釈記号が 3 つあります。コールバックが Java 1.0 でのみサポートされる場合は、コールバック名の後に文字列「J1.0」が表示されます。文字列「J1.1」は、 コールバックが Java 1.1 でのみサポートされることを示します。「J」だけの場合には、コールバックが両方のバージョンでサポー トされることを示します。リソースの場合と同様、注釈がない場合には、コールバックが Java では使用できないことを意味します。これらの注釈の例を図 10-5 に示します。

 

    図 10-5 コールバックダイアログの注釈

ウィジェット

Java コンポーネントのセットと、Motif ウィジェットのセットは同じではありません。つまり、Motif ベースのプラットフォーム上で構築されたデザインから Java コードを生成する際の問題を解決するには、次のようにして互いの過不足を補う必要があります。

    1. Sun WorkShop Visual で使用可能な Motif ウィジェットを、 Java クラスに対応付ける。

    2. Motif ウィジェットには対応付けできない Java クラスを表現するためのウィジェットを追加する。

上記の 1 を行うために、Sun WorkShop Visual には MWT が用意されています。これは、Motif ウィジェットをまねるクラスのライブラリです。このライブラリは MWT と呼ばれ、 $VISUROOT/lib/java_classes にあります。このライブラリ内のクラスは、 uk.co.ist.mwt というパッケージにまとめられています。
Sun WorkShop Visual から生成されたすべてのコードは、このパッケージをインポートします。

内部的には、Sun WorkShop Visual がどのウィジェットがどの Java クラスに対応するかを決定します。この対応付けの詳細と、Java コードに関連するリソースについては、「Motif ウィジェットから Java クラスへの対応付け - MWT ライブラリ」を参照してください。

上記の 2 を行うために、Motif には対応するクラスのない、以下の Java レイアウトクラスがウィジェットとして用意されています。

以下、これらについて説明します。

Java クラス用の新しいウィジェット

新しいウィジェットは 5 つあり、それぞれが個別の Java レイアウトマネージャを模倣しています。ウィジェットは Sun WorkShop Visual の一部であるため、パレットに表示されます。Sun WorkShop Visual のリリースには、これらのウィジェットのソースコードも付属しています。ソースコードは $VISUROOT/src/java_widgets にあります ( VISUROOT は Sun WorkShop Visual のインストールディレクトリです)。このディレクトリには、これらのウィジェットの詳細が記述された README というファイルも入っています。

次からのサブセクションでは、新しい Java ウィジェットとそのリソースの使い方を 1 つずつ説明します。

カードウィジェット

カードウィジェットは、Java の CardLayout クラスの Motif 版です。すべての子ウィジェットを同じ大きさで配置し、最上位の子だけが見えるようにします。子のそれ ぞれに「ページ番号」を付けることができ、指定したページ番号の子を表示するようカードウィジェットに 指示できます。

カードウィジェットの代表的な用途は、オプションメニューまたは「タブ」ボタン で制御する複数のページを持つダイアログです。

カードウィジェットに関連するリソースには、次の 3 つがあります。

  • 水平間隔 (horizontalSpacing)
  • 垂直間隔 (verticalSpacing)
  • 現行ページ (currentPage)

間隔リソースは XtRDimension 型であり、カードの周囲の間隔を表します。

現行ページリソースでは、カードのどの子を「最上位」として表示するかを指定し ます。このリソースは XtRInt 型です。

カードウィジェットの子にはそれぞれ、コンストレイントリソースである「ページ 番号 (pageNumber)」があります。そのため、子ウィジェットにページ番号を割り当てることができます。このリ ソースは XtRShort 型です。

特定の子を表示するには、カードウィジェットの現行ページリソースを、該当する 子に対して指定しておいた「ページ番号」に設定します。

なお、ユーザーのコード内でこれを実行できるように、カードウィジェットのソー スには、XdCardShowPage (Widget card, int page) という便利な関数が定義されています。

フローウィジェット

フローウィジェットは、Java の FlowLayout クラスの Motif 版です。子ウィジェットを行内で左から右に配置します。1 つの行に入らなくなると、次の行に移ります。つまり、ワープロで段落に単語を並べていくような形で配置 が行われます。行については、左詰め、右詰め、中央揃えが可能です。

フローウィジェットに関連するリソースには、次の 3 つがあります。

  • 水平間隔 (horizontalSpacing)
  • 垂直間隔 (verticalSpacing)
  • 水平配置 (horizontalAlignment)

水平間隔リソースと垂直間隔リソースは、XtRDimension 型です。これらのリソースは、子ウィジェットの行間隔と列間隔を表します。

水平配置リソースは XdRAlignment 型であり、左詰め、右詰め、中央揃えのいずれかに設定できます。

これらのリソースの効果は、段落内に文字を配置することと同様です。

ボーダーウィジェット

ボーダーウィジェットは、Java の BorderLayout クラスの Motif 版です。最大 5 つの子を、図 10-6 に示すように、東、西、南、北、中央という 5 つの位置に割り当てることができます。ボーダーウィジェットは 6 つ以上の子を持つことができますが、余った子は単にデフォルト位置に追加されるだけで配置されません。

 

    図 10-6 「ボーダーレイアウト」の概略図

北と南の子ウィジェットは、ボーダーウィジェットの幅全体に拡大されます。西と 東の子ウィジェットは、北と南の子ウィジェット間の縦方向の間隔を満たすように収められます。中央の子 ウィジェットは、残りの空間を満たします。このようにボーダーウィジェットは、MainWindow ウィジェットに取って代わる優れた手段です。MainWindow に関連して発生する多くの問題と不都合が解決します。なお、上記の 5 つの位置の中に空白のものがあってもかまいません。

ボーダーウィジェットに関連するリソースには、次の 2 つがあります。

  • 水平間隔 (horizontalSpacing)
  • 垂直間隔 (verticalSpacing)

いずれも XtRDimension 型であり、子ウィジェット間の間隔を表します。

ボーダーウィジェットの子にはそれぞれ、「ボーダー配置」というコンストレイン トリソースがあります。これは XdRBorderAlignment 型であり、東、西、南、 北、中央のいずれかに設定できます。

グリッドウィジェット

グリッドウィジェットは、Java の GridLayout クラスの Motif 版です。すべての子を同じ大きさで、グリッドパターンに沿って配置します。グリッドの列数はリソースで 指定しますが、行数は計算されます。グリッドウィジェットの大きさを変更すると、それに応じて子の大き さが変更されます。

グリッドウィジェットに関連するリソースには、次の 3 つがあります。

  • 水平間隔 (horizontalSpacing)
  • 垂直間隔 (verticalSpacing)
  • 列数 (numColumns)

水平間隔リソースと垂直間隔リソースは XtRDimension 型であり、子の行間隔と列間隔を表します。

列数リソースは XmRShort 型であり、グリッドに表示する列数を表します。

グリッドバッグウィジェット

グリッドバッグウィジェットは、Java の GridBagLayout クラスの Motif 版です。グリッドバッグウィジェットは複雑ですが、Motif と Java のすべてのレイアウトウィジェットにおいて、最も高い柔軟性を持っています。グリッドバッグウィジェッ トの発想は、グリッドの行と列によって形成されたセルにウィジェットを配置するというものです。ただし 、グリッドウィジェットの場合とは異なり、グリッドバッグウィジェットでは、行と列の高さと幅を変えら れるため、さまざまなタイプのウィジェットを収めることができます。行と列の大きさはそれぞれ、その行 で最大の高さを持つ子ウィジェット、またはその列で最大の幅を持つ子ウィジェットによって決まります。 子ウィジェットは、複数の行または列に拡大することができます。また、セル内での位置を指定して、そこ に配置することもできます。さらに、グリッドバッグの大きさを変更したときに、子ウィジェットの大きさ をどのように変更するかも制御できます。詳細については、「グリッドバッグの大きさの変更」を参照してください。

グリッドバッグに子を追加すると、既存の子ウィジェットの右側に配置されます。 この位置を変更するには、子ウィジェットごとにコンストレイントダイアログを使用する必要があります。

グリッドバッグのコンストレイントダイアログ

グリッドバッグの子のコンストレイントダイアログを図 10-7 に示します。

 

    図 10-7 グリッドバッグのコンストレイントダイアログ

コンストレイントダイアログの最上部には 2 つのオプションメニューが表示されます。セル配置リソースでは、配置対象の複数のセル内でウィジェット を配置したい位置を、「北」、「南」、「東」、「西」、「北東」、「北西」、「南東」、「南西」、「中 央」のいずれかで指定します。セル充填リソースでは、配置対象の複数のセルを対象に、その複数のセル全 体の大きさにウィジェットを拡大するかどうかを指定します。「水平」を選択すると、複数の列全体に拡大 されます。「垂直」を選択すると、複数の行全体に拡大されます。「両方」を選択すると、複数の行と列全 体に拡大されます。「なし」を選択すると、ウィジェットは元の大きさのままで、セル配置リソースで指定 した位置に配置されます。

行と列のリソースを使用すると、選択したウィジェットをグリッド内のどこに表示 するかを指定できます。一方、これと似た名前の行数と列数のリソースでは、そのウィジェットが占める行 と列の数を指定します。この場合、ウィジェットは指定の行数と列数全体には拡大されません。その動作は 、後述するセル充填リソースで制御されます。「行数」と「列数」のテキストボックスに入力できる値には 、特別な値が 2 つあります。

    1. 「列数」または「行数」のテキストボックスに 0 の値を入力すると、ウィジェットは現在の位置から端にある行または列までの大きさに拡大されます。

    2. 「列」または「行」のテキストボックスに -1 の値を入力すると、新しいウィジェットは、既存のウィジェットの垂直方向 (列の場合) または水平方向 (行の場合) に隣接して配置されます。

行の重みリソースと列の重みリソースは、リサイズ方針を表します。これについて は、「グリッドバッグの大きさの変更」を参照してください。

「X 方向を埋める」 リソースおよび「Y 方向を埋める 」リソースでは、コンポーネントの各端部にそれぞれ水平および垂直に追加する内部パディングの量を指定 します。

外部パディングリソース (右、左、下、上) では、選択したウィジェットの各端部に現れるマージンを指定します。

グリッドバッグの大きさの変更

グリッドバッグの子のコンストレイントダイアログには、行の重みリソースと列の 重みリソースが表示されます。これらのリソースは、グリッドバッグの大きさを変更した場合に行と列の大 きさの変更に影響を与えます。

グリッドバッグの子ウィジェットごとに行の重みと列の重みを指定することもでき ますが、グリッドバッグは、各行と各列における最大値を検索して、その数値を行や列の全体の計算に使用 します。そのため、ウィジェットごとに重みを設定する必要はありません。各行と列で 1 つのウィジェットに設定すれば済みます。

行と列の重みを設定するとどのような効果があるのかをわかりやすく説明するため に、以下に例を示します。

行の重みの例

まず、行の重みの例を取り上げます。行の重みを図 10-8 に示すように設定したとします。先頭の行の重みは 3 で最大、真ん中の行は 2、下の行は 1 です。これらの最大値の設定だけが意味をなし、それぞれの行の他の重みは無視されます。

グリッドバッグはすべての行の重みの合計を計算します。この例では 6 になります。この状態で、グリッドバッグを下方向に拡張したとします。増えたスペースは、次のように各 行に配分されます。

  • 重みが 3 の行には、増加スペースの半分が配分されます。3 は 6 の半分であるためです。
  • 重みが 2 の行には、増加スペースの 3 分の 1 が配分されます。2 は 6 の 3 分の 1 であるためです。
  • 重みが 1 の行には、増加スペースの残り、つまり 6 分の 1 が配分されます。1 は 6 の 6 分の 1 であるためです。

 

    図 10-8 行の重み設定の例

列の重みの例

列に関するスペース配分の計算方法は、上述の行の場合と同じです。図 10-9 に示すような列の重み設定のウィジェットがあるとします。この図は、行の重みを列の重みに置き換えただ けで、図 10-8 と同じ図です。列の重みの最大値は、左列が 2、右列が 3 です。グリッドバッグが注目するのは各列で最大の列の重み値だけであり、他の列の重み設定値は無視され ます。最大の列の重み値の合計は 5 になります。増加スペースが生まれた場合には、これらの数値に基づいて配分計算が行われます。

この図のグリッドバッグを右方向に拡張したとします。増えたスペースは、次のよ うに各列に配分されます。

  • 列の重みが 2 の左列には、増加スペースの 5 分の 2 が配分されます。2 は 5 の 5 分の 2 であるためです。
  • 列の重みが 3 の右列には、増加スペースの残り、つまり 5 分の 3 が配分されます。3 は 5 の 5 分の 3 であるためです。

 

    図 10-9 列の重み設定の例

グリッドバッグのリソース

グリッドバッグウィジェットにはリソースが 2 つあります。

  • 水平間隔 (horizontalSpacing)
  • 垂直間隔 (verticalSpacing)

いずれも XmRInt 型であり、行間隔と列間隔を表します。

イベントモデル

バージョン 1.0 と 1.1 の Java では、イベントモデル (オブジェクト間でメッセージを受け渡す方法) が変更されています。生成するバージョンとして「Java 1.1」を選択した場合には、新しいイベント処理の仕組みが使用されます。

どちらの仕組みを使用していても、(コールバック関数ではなく) コールバックメソッドを登録した場合には、イベントが生成されたときにそのメソッドが呼び出されます。 この 2 つのバージョンの主な違いは、コールバック「関数」の処理方法です。

Java 1.0 のコードを生成した場合には、すべてのコールバック関数は無視され、生成されません。Java ではクラスを取り扱うため、メソッドの概念だけがサポートされています。

しかし、Java 1.1 のコードを生成するときには、コールバック関数は、Sun WorkShop Visual によって生成できる外部リスナーオブジェクトへの呼び出しとして扱われます。つまり、C++ から Java に移行するときにコード内で関数が使用されている場合には、Java 1.1 のコードを生成することで等価な動作を維持することができます。

Sun WorkShop Visual でのリスナーオブジェクト

Java 1.1 のコードを生成するとき、Sun WorkShop Visual は (メソッドではなく) 関数として定義されたコールバックをリスナーオブジェクトとして解釈します。リスナーオブジェクトは、 ユーザーインタフェースのフロントエンドで発生するアクションと残りのアプリケーションとの間のインタ フェースを実現するクラスのインスタンスです。これらは「補助」クラスや「アダプタ」クラスとも呼ばれ ています。

コールバック関数からリスナーオブジェクトを生成する方法は、次のリソースによ って制御されます。

visu*javaWrapFunctions:true

デフォルトは「true」です。true の場合には、次の項で説明するように、Sun WorkShop Visual はラッパーオブジェクトを生成します。「リスナーオブジェクトを自分で制御」で説明するように、リスナーオブジェクトのコードを 自分で処理したい場合には、このリソースを「false」に設定してください。

コールバックオブジェクトの使用

Java 1.1 が生成されるとき、コールバック関数はリスナーオブジェクトへの参照として扱われます。コールバックオ ブジェクトは、個別のファイルに生成されます。このファイルの名前は関数名に「callback」を付加したも のになります。たとえば、「myFunction」というコールバック関数がある場合には、 myFunctionCallback.java という別個のファイルに以下のクラスが生成されます。

public class myFunctionCallback
{
        static myFunctionCallback me = null;
 
        public void doit( AWTEvent e, Object context)
        {
		// ここにコードを記述
        }
 
        static myFunctionCallback getInstance()
        {
		return new myFunctionCallback();
        }
 
        static myFunctionCallback get()
        {
		if (me == null)
			me = getInstance();
		return me;
        }
}

このファイルは、まだ存在しない場合にだけ生成されます。このファイルは上書き されないため、追加したコードが失われる恐れはありません。

各コールバックのオブジェクトのインスタンスは 1 つだけです。複数の異なるウィジェットに同一のコールバック関数を追加した場合には、これらのウィジェ ットは、1 つのインスタンスを返す get() メソッドを呼び出すことによって、1 つのコールバックオブジェクトを共有することになります。このオブジェクトは、 get() が最初に呼び出されたときに生成されます。

コールバックオブジェクトには、標準のコールバックスタブに似た doit() メソッドがあります。ユーザーのコードは、この doit() に追加します。 doit() メソッドは、定義された関数を持つオブジェクトの包含するクラス内のリスナーオブジェクトから呼び出さ れます。コンテキストオブジェクトとイベント自身は、 doit() メソッドに渡されます。次に例を示します。

{ // Java の大域的なコールバックオブジェクト
	final myFunctionCallback myFunctionHandler = 
		myFunctionCallback.get();
	if ( myFunctionHandler != null )
		button1.addActionListener(
			new ActionListener()  {
				public void actionPerformed(ActionEvent event)  	
				{
					myFunctionHandler.doit(event, 
						XApplication.this);
				}
			}
		);
}

これはデフォルトの動作です。javaWrapFunctions リソースを「false」に変更すると、次の節で説明する動作が行われます。

リスナーオブジェクトを自分で制御

javaWrapFunctions リソースを「false」に設定した場合には、上述のコールバックオブジェクトのコードは生成されません。 ボタンの活性化コールバックの場合は、包含するクラスには次のコードが生成されます。

if (myFunction != null)
	button1.addActionListener( myFunction );

ここで、「button1」は、定義されたコールバック関数を持つウィジェットの名前で あり、「 myFunction 」はコールバック関数の名前です。

生成されるコードは意図的に不完全なものとなっており、そのままではコンパイル できません。以下に示す 2 種類のコードを追加する必要があります。

    1. リスナーオブジェクト「myFunction」の宣言

    2. 「 myFunction 」がインスタンスとなるクラスの定義

最初のコードは比較的簡単です。次のようになります。

EventListener myFunction = new 
EventListener();

このコードでは、定義しようとするクラスである「EventListener」のインスタンス として、リスナーオブジェクト「 myFunction 」を宣言します。

2 番目のコードはもう少し複雑です。

class EventListener implements TextListener, ActionListener {
public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();
        if (source == button1)
            // ここに動作を行うためのコードを追加
	}
}

これは新しい EventListener クラスの定義です。button1 でイベントが発生すると、メソッド「actionPerformed」が呼び出されます。このようなクラスを「公開」 アクセス機能を持つ専用のファイルに定義すれば、どのコンポーネントからも使用できるようになります。 次に、コンポーネント(この場合は「button1」)にアクセスできることを確認する必要があります。

    注 - コールバックダイアログで Java 準拠とマークされたコールバックだけが生成されます。コールバックリストに Java マークのないコールバックは、Java コードの生成時に無視されます。

リスナーオブジェクトとしての X イベント

ウィジェットを選択した状態でウィジェットメニューから「イベントハンドラ ...」を選択すると、「イベントハンドラ」で説明するイベントハンドラダイアログが表示されます。Java 準拠のイベントマスクを指定した場合には、ここで追加される手続きは、Java コードが生成されるときにコールバック関数と同じに扱われます。Java 準拠でないイベントマスクは、Java コードが生成されるときに無視されます。

Sun WorkShop Visual では、コールバック関数の場合と同様に、手続きに対して与えられた名前を持つリスナーオブジェクトがあ るものと想定します。Sun WorkShop Visual は、それぞれの X イベントマスクに対応して、Java イベントタイプごとにリスナーオブジェクトを登録します。たとえば、図 10-10 では、以下のイベントマスクを持つイベントハンドラを示します。

PointerMotionMask | KeyReleaseMask | EnterWindowMask

このイベントマスクは、「MyButton」というウィジェット上の「exampleHandler」 という手続きに対するものです。

 

    図 10-10 イベントハンドラの例

このようなイベントハンドラに対して、Sun WorkShop Visual は以下の Java コードを生成します。

if (MyHandler != null)
     
MyButton.addMouseMotionListener(myHandler);
if (MyHandler != null)
     MyButton.addKeyListener(myHandler);
if (MyHandler != null)
     MyButton.addMouseListener(myHandler);

次に、生成されたコードファイルに行を追加することによって、myHandler は他の場所で定義されたクラスのインスタンスであることを宣言する必要があります。次に例を示します。

MyHandler myHandler = new MyHandler();

このコードをコンパイルするには、クラス MyHandler を定義する必要があります。このクラスは次のシグニチャーを持つことになります (必要ならば「公開」にすることもできます)。

class MyHandler implements MouseMotionListener, KeyListener,
                                           MouseListener {

MyHandler クラスには、3 つのリスナークラスのすべてのメソッドの定義が含まれます。

コールバック・メソッドのシグニチャーに関するバージョンの非互換性

Java 1.0 のコールバック・メソッドのシグニチャーを次に示します。

void foo(Event x)

Java 1.1 の場合には、次のシグニチャーになります。

void foo(AWTEvent x)

その結果、既存の Java 1.0 ファイルの先頭に新しい Java 1.1 ファイルを生成した場合には、すべてのコールバック・メソッドに対して新しいスタブが生成されます。古 いスタブはもちろん残されますが、もはや呼び出されるメソッドではありません。デザインを Java 1.0 から Java 1.1 に移行するときには、古いメソッドのコードを新しいメソッドに移動して、イベントオブジェクトを使用す るすべてのコードを更新してください。

生成ダイアログ

「言語」オプションメニューから Java を選択した場合、その他の言語の場合とはまったく異なる「コード生成」ダイアログが表示されます。図 10-11 に示したように、生成可能なファイルのリストが表示されます。

 

    図 10-11 Java 用の「コード生成」ダイアログ

「ディレクトリ」というテキストボックスに、ファイルが生成される場所が示され ています。この生成先を変更するには、ディレクトリ名をテキストボックスに直接入力するか、「...」ボ タンを押してファイル選択ダイアログを使用します。

生成されるのは、選択状態 (強調表示) のファイルのみです。ファイルを選択または選択解除したいときは、該当ファイルをクリックします。複数 のファイルを一度に選択するときは Shift キーを併用し、ファイルを個別に選択リストに追加するときは Control キーを併用します。このダイアログに示されるファイルの詳細については、「Java のファイル」を参照してください。生成されたコードをコンパイルし、実行する方法については、「生成されたファイルの使用」を参照してください。

「Java オプション」というボタンを選択すると、図 10-12 のような、Java コードの生成に関するオプションが並んだダイアログが表示されます。「オプション」ボタンを押したとき に表示される「コードオプション」ダイアログの詳細については、「コード生成オプション」を参照してください。

 

    図 10-12 Java 生成オプションダイアログ

Java 生成オプションダイアログ

Java 生成オプションダイアログを使用すると、Java コードの生成に関する次の 5 点を制御できます。

    1. アプリケーションとアプレットのどちらを作成するか

    2. アプリケーションの基本クラスの名前

    3. 生成する Java コードのバージョン

    4. gif ファイルを使用するデザインにするかどうか

    5. クラスをパッケージにまとめる場合は、作成するパッケージの名前

アプリケーションかアプレットかの選択

デフォルトでは、デザインからアプリケーションが生成されます。アプレットを生 成したい場合は、「オプション」メニューから該当するオプションを選択してください。「アプレット」を 選択した場合、生成されるメインコードファイルには、アプリケーションを HTML ブラウザ内で実行できるようにするためのコードも生成されます。

基本クラスの変更

メインコードファイルには、デザインにリンクしている 1 つのクラスが入っています。このクラスの名前は、コードオプションダイアログでアプリケーションクラス として指定した名前 (またはデフォルトの XApplication) です。これを別のクラスから拡張するには、「基本クラス」というテキストボックスに名前を入力してくだ さい。アプリケーションを生成することにした場合に、基本クラスを指定しなかったときは、アプリケーシ ョンクラスは拡張されません。アプレットを生成することにした場合に、基本クラスを指定していなかった ときは、デフォルトでは「Applet」という Java クラスが使用されます。

GIF の使用

ダイアログの GIF オプションの領域は、アプリケーションとアプレットのどちらを生成するかによって、形式が異なります。 ただし、いずれの場合も、セクションの最上部には「イメージに GIF を使用」というトグルがあります。このトグルを選択しなかった場合は、セクションの残りは無効になりま す。アプリケーションを生成する場合にこのトグルを選択すると、ピックスマップオブジェクト用に生成さ れるコードでは、すべてのピックスマップはそれぞれ別の gif ファイルに入るものと見なされます。一方、「イメージに GIF を使用」トグルを設定しなかった場合は、ピックスマップオブジェクトは、 <ApplicationClassName>PixmapObjects.java というファイルに整数の配列として格納されます。「イメージに GIF を使用」トグルを設定した場合は、このファイルには GIF ファイルを読み込むためのコードが入ります。また、この場合は、Java コードファイルのリストにさらに 1 つのファイルが追加されます。追加されるのは、 <ApplicationClassName>Properties というプロパティファイルです。このファイルでは、 gif が次のように表されています。

<ApplicationClassName>.<ApplicationImagesName>.<PixmapObjectName>

ここで、「ApplicationImagesName」は、このダイアログの「GIF オプション」領域にあるテキストフィールドに入力した値です。たとえば、デフォルトのアプリケーション クラス名である XApplication を使用し、「TreeIcon」というピックスマップオブジェクトを作成し、テキストフィールドに「MyApplicat ionImages」という値を入力した場合には、TreeIcon ピックスマップのプロパティ名は次のようになります。

XApplication.MyApplicationImages.TreeIcon

また、ピックスマップオブジェクトが「LeafIcon」という別のオブジェクトである 場合には、プロパティ名は次のようになります。

XApplication.MyApplicationImages.LeafIcon

アプレットを生成する場合に「イメージに GIF を使用」トグルを設定していると、ダイアログの「GIF オプション」セクションには、GIF イメージがあるディレクトリを
(ドキュメントのベースディレクトリに相対的に) 指定するためのテキストボックスが表示されます。

アプリケーションまたはアプレットで gif を使用したい場合は、 gif ファイルを作成する必要があります。この作業を支援するため、Sun WorkShop Visual には、すべてのピックスマップオブジェクトを対象にして XPM ファイルを一度に作成する機能があります。この機能を使用するには、「コード生成」ダイアログの「ピッ クスマップ」ページに進んでください。このページには、デザイン内のピックスマップオブジェクトのリス トが表示されています。

「生成」を押すと、オブジェクトごとに <PixmapObjectName>.xpm という名前の XPM ファイルが作成されます。作成の際には、XPM2 形式と XPM3 形式のどちらかを選択できます。XPM ファイルの作成後、変換ユーティリティを使用して、それらのファイルを GIF に変換する必要があります。変換ユーティリティとしては、 pbmplus netpbm など、いくつかのユーティリティが無料で配布されています。

パッケージの指定

Java 生成オプションダイアログの一番下には、パッケージの名前を指定するためのテキスト領域があります。パ ッケージとは、使用目的に合わせてクラスをグループ化したものです。クラスをパッケージとして生成する ことにした場合は、パッケージをインポートするための文がメインコードファイルに追加されます。

    注 - パッケージの構成と命名には一定の規則があります。詳細については Java のマニュアルを参照してください。

生成されたコード

Java のコードは、C や C++ のコードとは構造が若干異なっています。Java のコードは必ずクラス内になければなりません。また、単独のクラスはそれぞれ専用のファイルに格納しな ければなりません。 main 関数はアプリケーションクラスのメソッドです。Java インタプリタはこのメソッドを見つけ出して、アプリケーションを開始します。

Java のファイル

「コード生成」ダイアログで言語設定のメニューから「Java」を選択すると、選択 可能なファイルのリストが表示されます。このリストは、デザインの構造に応じて次のいずれかになります (山括弧で囲んだ部分は、デザインで使用している名前に応じて変わります)。

    1. <ApplicationClassName>.java
    アプリケーションを定義しているクラスである、アプリケーション用の主要コードファイルです。このクラ スの 1 つのメソッドは main 関数です。ファイル名は、アプリケーションクラスの名前になります。デフォルトでは「XApplication」で す。この名前は、コードオプションダイアログで変更できます。

    2. <ApplicationClassName>Links.java
    ウィジェット間でダイナミックリンクを実現するためのコードが入ったファイルです。リンクを設定しない 場合は、このファイルは不要です。

    3. <ApplicationClassName>PixmapObjects.java
    ピックスマップオブジェクトを指定している場合は、それに対応するファイルが表示されます。

    4. <ApplicationClassName>FontObjects.java
    フォントオブジェクトを指定している場合は、それに対応するファイルが表示されます。

    5. <ApplicationClassName>ColourObjects.java
    カラーオブジェクトを指定している場合は、それに対応するファイルが表示されます。

    6. <ApplicationClassName>StringObjects.java
    文字列オブジェクトを指定している場合は、それに対応するファイルが表示されます。

    7. <WidgetClassName>_c.java
    (コアリソースパネルで) Java クラスと指定したウィジェットには、クラス定義が入った専用のコードファイルが必要です。そのため、デ ザイン内のクラスと同数のコードファイルが表示されるはずです。何らかの理由でデザイン内の特定のウィ ジェットを無視する必要がある場合を除いて、これらのファイルは生成しなければなりません。

コマンド行でのコード生成

コマンド行から Java コードを生成する場合に備えて、Sun WorkShop Visual には -J というフラグが追加されています。

コード例

図 10-13 に示す階層とデザインに対して、Sun WorkShop Visual が生成したコードを次に示します。このコードを自分で生成するには、以下の手順に従ってください。

    1. シェルウィジェットを選択します。

    2. シェルに「MyShell」という名前を付けます。

    3. 「MyShell」をアプリケーションシェルにします。

    これは、シェルのリソースパネル内で行います。

    4. シェルにダイアログテンプレートを追加します。

    5. ダイアログテンプレートに「MyMessageBox」という名前を付けます。

    6. 3 つのプッシュボタンウィジェットと 1 つのフォームウィジェットを選択します。

    7. フォームの子としてスクロールテキストを選択します。

    8. スクロールテキストに「MyScrolledText」という名前を付けます。

    9. スクロールテキストを選択し、マウスの右ボタンを押します。表示されたメニューから「クラス作成」を選 択します。

    これは、選択したウィジェットの構造を簡単に変更する方法です。このようにする 代わりに、コアリソースパネルを表示して「コード生成」ページに進み、「構造」オプションメニューを「 C++/Java クラス」に変更してもかまいません。

これで、図 10-13 に示す階層ができたはずです。

 

    図 10-13 コード例の階層とデザイン

この簡単なデザインには、生成されるコードを示すという目的しかないため、リソ ースは設定していません。「コード生成」ダイアログで「Java」を選択すると、図 10-14 に示すファイルが表示されます。

 

    図 10-14 コード例の生成ダイアログ

アプリケーションクラス名を指定していないため、ファイル名にはデフォルト (XApplication) が使用されます。アプリケーションの開始点となる main メソッドを含む、 XApplication.java ファイルが必要になります。また、スクロールテキストウィジェットのクラス定義である MyScrolledText_c.java ファイルも必要です。そのため、次のような作業を行います。

    10. XApplication.java と MyScrolledText_c.java の両方が選択状態になっていることを確認します。

    11. ダイアログの上部にある「ディレクトリ」を確認します。このディレクトリがファイルの生成先となるので 、必要に応じて変更します。

    12. 「生成」を押します。

    ウィジェットをクラスにする時期については、「クラスにするかどうかの判断」を参照してください。

XApplication.java ファイルのコードは、次のとおりです。

/*
** Generated by Sun WorkShop Visual/Java(tm) Edition
*/
import java.awt.*;
import uk.co.ist.mwt.*;
/*
** Sun WorkShop Visual/Java(tm) Edition - main program
*/
/**
 * A class representing the user interface specified by the entire
 * design.
*/
public class XApplication  {
	protected MyScrolledText_c MyScrolledText;
	protected Panel MyMessageBox;
	DlogTemplateLayout MyMessageBoxLayout = new 
		DlogTemplateLayout();
	protected Frame MyShell;
	public XApplication()  {
		Button button3;
		Button button4;
		Button button5;
		Panel form2;
		FormLayoutManager form2Layout = new 
			FormLayoutManager();
		MyShell = new Frame();
		MyMessageBox = new Panel();
		MyShell.add( "Center", MyMessageBox );
		MyMessageBox.setLayout( MyMessageBoxLayout );
		button3 = new Button( "button3" );
		MyMessageBox.add( button3 );
		button4 = new Button( "button4" );
		MyMessageBox.add( button4 );
		button5 = new Button( "button5" );
		MyMessageBox.add( button5 );
		form2 = new Panel();
		MyMessageBox.add( form2 );
		form2.setLayout( form2Layout );
		MyScrolledText = new MyScrolledText_c();
		form2.add( MyScrolledText );
		FormLayoutConstraints MyScrolledTextConstraints = 
				new FormLayoutConstraints();
		form2Layout.constrain( MyScrolledText, 
				MyScrolledTextConstraints );
		MyShell.pack();
		MyShell.layout();
		MyMessageBox.layout();
		form2.layout();
		MyScrolledText.layout();
		MyShell.show();
 
        }
 
        public static void main( String args[] )  {
		new XApplication();
        }
 
}  /* ...class XApplication (main application class) */
/*
** (end of Sun WorkShop Visual/Java(tm) Edition generated main program)
*/
/*
** (end of Sun WorkShop Visual/Java(tm) Edition generated code)
*/
Now, this is MyScrolledText_c.java :
/*
** Generated by Sun WorkShop Visual/Java(tm) Edition
*/
import java.awt.*;
import uk.co.ist.mwt.*;
/**
 * A class represented by the widget MyScrolledText_c in the design 
file
 */
// Private: classHeader Sun WorkShop Visual-generated code - do not edit >>>
class MyScrolledText_c extends TextArea  {
// Private: classHeader <<< Sun WorkShop Visual-generated code ends.
 
// Private: instanceVars Sun WorkShop Visual-generated code-do not edit >>>
// Private: instanceVars <<< Sun WorkShop Visual-generated code ends.
/**
* The constructor method for MyScrolledText_c
*/
// Private: constructor Sun WorkShop Visual-generated code - do not edit >>>
	public MyScrolledText_c()  {
 
	}
// Private: constructor <<< Sun WorkShop Visual-generated code ends.
// Private: endClass Sun WorkShop Visual-generated code - do not edit >>>
}
// Private: endClass <<< Sun WorkShop Visual-generated code ends.
/*
** (end of Sun WorkShop Visual/Java(tm) Edition generated code)
*/

これらのファイルは、必要に応じて修正して自由に使用できます。ただし、MWT を組み込む必要があります。次の行を加えると、Sun WorkShop Visual に付属のすべての Java クラスライブラリが Java プログラムにインポートされます。

import uk.co.ist.mwt.*;

つまり、生成されたファイルを別のプラットフォームに持ち込んで、結果のアプ リケーションをそこで実行したい場合には、Java クラスライブラリの MWT もインポートする必要があるということです。

生成されたファイルの使用

生成した Java コードファイルは、Java に対応しているプラットフォームで自由に使用できます。ただし、そのプラットフォームに MWT ライブラリがあることが前提です。生成されたファイルから Java アプリケーションを作成するには、以下の手順に従ってください。

    1. CLASSPATH 環境変数が、「必要条件」に示したとおりに設定してあることを確認します。

    2. 生成したクラスが入っているディレクトリが CLASSPATH のリストに含まれていることを確認します。

    このディレクトリは、現作業ディレクトリでもかまいません。その場合は、CLASSP ATH リストに . (ピリオド) が含まれていることを確認してください。

    3. Java コンパイラが入っているディレクトリが PATH 環境変数に含まれていることを確認します。

    4. javac <ApplicationName>.java と入力します。

    これで、<ApplicationName> に拡張子「.class」が付いたファイルが生成されます。

    5. java <ApplicationName> と入力します。

    Java アプリケーションが画面に表示されます。

コールバックスタブ

Java コードファイル内のコードはすべて、クラス内になければなりません。つまり、所属するクラスの一部とし てコールバックスタブが生成されています。他の言語にあるような、別ファイルのコールバックファイルは ありません。生成コードに追加されたすべてのコードは、それが保護のためのコメントの外側にある限りは そのまま残されるため、これによって不都合が生じることはありません。この件については、「編集内容の保持」で説明します。

編集内容の保持

前述のコード例には、次のような部分がありました。

/**
* The constructor method for MyScrolledText_c
*/
// Private: constructor Sun WorkShop Visual-generated code - do not edit >>>
	public MyScrolledText_c()  {
 
	}
// Private: constructor <<< Sun WorkShop Visual-generated code ends.

この部分では、追加コードを保持する方法を示すために、多数のコメントを使用し ています。最初のコメントは、コードをわかりやすくするために加えているだけです。一方、2 番目と 3 番目のコメントには特別な意味があります。
// Private: ... - do not edit 」で始まるコメントは、次に続く部分をそのまま残す必要があることを表しています。対応する「 // Private: ... ends 」は、そのままで残す部分の終わりを示しています。

この特殊なコメントの外側にコードやコメントを加えた場合は、ファイルを生成し 直すとそのままで残されます。たとえば、コールバック・メソッドにコードを追加した場合に、そのコード が必ず残されるようにできます。

Javadoc

Java コンパイラとインタプリタには、 javadoc という自動文書化ツールも含まれています。 .java ファイルを発見すると、 javadoc は、宣言および「/**」で始まるコメントを解析して、クラス継承のつながり、クラス内のすべての公開フ ィールド、および特殊コメントに含まれた追加情報を集めた HTML ページを作成します。特殊コメントの仕組みによって、 javadoc が作成する文書に必要な情報が追加されます。Sun WorkShop Visual によって生成されるコードには、 javadoc の基本的な情報がいくつか含まれています。

Sun WorkShop Visual のデザインを Visaj に移行

Sun WorkShop Visual では、Sun WorkShop Visual のデザインをJava の開発ツールである Visaj にインポートできます。この機能を使用すれば、これまでの Motif C/C++ のデザインを Java に簡単に移行できます。

もちろん、Sun WorkShop Visual の Java コード生成機能を使用してデザインを Java に変換することもできます。この方法では、Java で使用できる共通のコードベース (Motif では C/C++、Microsoft Windows では MFC) を維持することができます。しかし、Java だけを使用する場合には、IST の Java 用ビジュアルアプリケーションビルダーである Visaj に移行することをお勧めします。製品の詳細については、以下の URL を参照してください。

	http://www.ist.co.uk

デザインを Sun WorkShop Visual から Visaj に移行するには、以下の手順を実行するだけで済みます。

この節では、Sun WorkShop Visual と Visaj の両方から移行を行う方法について説明します。この節の最後には、障害対処のヒントを掲載しています。

Sun WorkShop Visual から

Visaj でファイルを保存するには、「ファイル」メニューから「別名保存」を選択し、「保存形式」オプションメ ニューから「visaj ブリッジの形式」を選択します。

ファイル名を指定してから「了解」ボタンを押します。この名前は、デザインのデ フォルトファイル名としては使用されません。

デザインが Java 1.1 に準拠していない場合には、準拠ダイアログが表示されます。これは、非準拠デザインから Java を生成するときに表示されるものと同じダイアログです。エラーを訂正してから、もう一度保存してくださ い。

ファイルが生成されるとき、画面にウィンドウが一瞬表示されることがあります。

Visaj へ

ファイルメニューの「Import (インポート)」プルライトメニューには、「X-Designer bridge file (X-Designer ブリッジファイル)」という項目があります (X-Designer と WorkShop Visual の保存ファイルは完全に互換性があります)。これが選択されると、ファイルダイアログが表示されます。S un WorkShop Visual から保存されるファイルの名前を入力します。

使用する Visaj のバージョンでは対応できない機能を Sun WorkShop Visual で使用した場合1、検出された機能に関するダイアログが表示されます。このダイアログに表示され る項目は次のとおりです。

One or more classes were expanded into simple component hierarchies

(意味: 1 つ以上のクラスが単純な構成要素の階層に展開されました)

Sun WorkShop Visual では、どのコンポーネントでもクラスにできます。Visaj では、クラスはさまざまなデザインに含まれる独立した階層として扱われます。デザイン内でこれらを一緒 に使用する方法を次に示します。

    1. 各クラスのコードを生成します。

    2. コードをコンパイルします。

    3. コンパイルされたクラスを JavaBeans としてパレットに追加します。

    4. 新たに追加された JavaBeans を大きなデザインで使用します。

この方法で Sun WorkShop Visual から Visaj に変換すれば、Sun WorkShop Visual で自動的に行う場合に比べて、クラスの使用方法を柔軟に制御できます。

インポートの際に、Visaj はクラスを「拡張」します。もちろん、デザインをインポートした後でサブ階層をカットし、新しい Visaj デザインにペーストすることによって、この拡張を手直しすることもできます。

One or more frames were moved into their own classes

(意味: 1 つ以上のフレームが自分自身のクラスに変換されました)

Visaj は、クラスごとに 1 つのフレームをサポートします。デザインに複数のアプリケーションシェルや最上位シェルが含まれている 場合には、そのデザインは複数
(シェルごとに 1 つ) の Visaj クラスファイルに変換されます。

これとは対照的に、ダイアログはすべてアプリケーションシェル (アプリケーションシェルがない場合には最上位シェル) が親になるように設定されます。しかし、アプリケーションシェルがなく、最上位シェルもなく、複数のダ イアログがある場合には、各ダイアログは専用のクラスに置かれます。

String/font/color objects in your design were expanded into simple property settings

(意味: デザイン中の文字列、フォント、カラーのオブジェクトが単純な属性設定に展開されました)

Visaj には文字列、フォント、カラーの各オブジェクトに対応するオブジェクトがないため、オブジェクトへのす べての参照は、単純なリソース値に拡張されます。たとえば、ラベル myLabel が値が「Hello」である文字列オブジェクト、<myObject> を持つ場合には、インポート後、myLabel がテキスト「Hello」を持ち、<myObject> は使用されなくなります。

All XmForms in the design were changed to absolute positioning using a null layout

(意味: すべての XmForm がヌル配置で絶対的に位置決めされました)

Visaj では、レイアウトマネージャ com.pacist.mwt.FormLayoutManager は存在しません。その結果、このマネージャによってレイアウトが制御されるコンポーネントは、絶対的に 位置決めされます。

    注 - いずれかの Java レイアウトマネージャを使用するよう、デザインを変更することをお勧めします。

インポートの後

Visaj にインポートされたデザインは、Sun WorkShop Visual での Motif デザインとまったく同じになります。これは Java コードを直接に生成した場合と同じですが、Visaj では、Java のアプリケーション開発を続行することができます。

Motif ウィジェットから Java クラスへの対応付け - MWT ライブラリ

Sun WorkShop Visual を使用すると、Motif ベースのアプリケーションでアプリケーションユーザーインタフェースをデザインして、Motif 用の C と C++ コードおよび Java コードを生成することができます。このようなことができるのは、Motif のウィジェットを Java クラスに対応付ける、MWT という Java クラスのライブラリが Sun WorkShop Visual に用意されているためです。Motif のウィジェットによって、Java に対応する要素のある場合とない場合があります。明確な対応付けのない場合は、使用可能な Java クラスを使用して MWT ライブラリが Motif ウィジェットのまねをしようとします。以下のサブセクションでは、Sun WorkShop Visual のウィジェットパレットで使用可能な Motif ウィジェットを示し、生成される Java コードで使用される Java クラスや MWT クラスを明らかにします。

シェル

シェルをアプリケーションシェルまたは最上位シェルに設定すると、Java Frame クラスに対応付けられます。ダイアログシェルに設定した場合は、Java Dialog クラスに対応付けられます。ただし、シェルの子がファイル選択ボックスである場合は、シェルとファイル 選択ボックスの両方が 1 つの Java FileDialog クラスに対応付けられます。

メッセージボックス

メッセージボックスウィジェットは、XmNdialogType リソースの値に従って 3 種類の Java クラスに対応付けることができます。XmNdialogType リソースは、メッセージボックスリソースパネルの「設定」ページで設定できます。この 3 種類の対応付けは次のとおりです。

  • 「ダイアログの種類」リソースを、「エラー」、「情報」、「質問」、「警告」、 「作業中」のいずれかに設定している場合
    この場合、ウィジェットは、MWT ライブラリに含まれる IconMessagePanel クラスに対応付けられます。
  • 「ダイアログの種類」リソースを「メッセージ」に設定している場合
    この場合 、ウィジェットは、MWT ライブラリに含まれる MessagePanel クラスに対応付けられます。
  • 「ダイアログの種類」リソースを「テンプレート」に設定している場合
    この場 合、ウィジェットは、MWT ライブラリの DialogTemplateLayout クラスと組み合わせた Java Panel クラスに対応付けられます。

メインウィンドウ

メインウィンドウ・ウィジェットは、基本的に、特定のリソース設定を行なった複 合ウィジェットです。このウィジェットを模倣するため、Sun WorkShop Visual はメインウィンドウを、設定されているリソース、および子ウィジェットの数に従って、Panel クラスと BorderLayout クラスの各種の組み合わせに対応付けます。

描画領域

描画領域ウィジェットは、MWT ライブラリの DrawingAreaLayout と組み合わせた Java Panel クラスに対応付けられます。

ダイアログテンプレート

ダイアログテンプレートウィジェットは、MWT ライブラリの DialogTemplateLayout クラスと組み合わせた Java Panel クラスに対応付けられます。

メニューバー

Java MenuBar クラスに対応付けられます。

ブリテンボード

ブリテンボードウィジェットは、MWT ライブラリの BulletinBoardLayout クラスと組み合わせた Java Panel クラスに内部的に対応付けられます。

コマンド

MWT ライブラリの CommandPanel クラスに対応付けられます。

メニュー

メニューウィジェットは、Java Menu クラスに対応付けられます。なお、これはプルダウンメニューです。ポップアップメニューは Java クラスには対応付けられません。

フォーム

フォームウィジェットは、MWT ライブラリの FormLayoutManager クラスと組み合わせた Java Panel クラスに対応付けられます。

選択プロンプト

選択プロンプトウィジェットは、MWT ライブラリの SelectionPanel クラスに対応付けられます。このウィジェットを、やはり SelectionPanel クラスに対応付けられる選択ボックスと区別するため、内部クラスメソッドが呼び出されます。

ラジオボックス

このウィジェットは、Java CheckBoxGroup クラスおよびレイアウトマネージャと組み合わせた Java Panel クラスに対応付けられます。

区画ウィンドウ

区画ウィンドウ・ウィジェットは、MWT ライブラリの PanedWindowLayout クラスと組み合わせた Java Panel クラスに対応付けられます。

選択ボックス

MWT ライブラリの SelectionPanel クラスに対応付けられます。

ローカラム

ローカラムウィジェットは、間隔設定方法リソースが「列」と「密」のどちらに設 定されているかに応じて、(MWT ライブラリの) ColumnPackedRCLayout クラスか TightPackedRCLayout クラスと組み合わせた Java Panel クラスに対応付けられます。

スクロールウィンドウ

スクロールウィンドウの「スクロールの方針」リソースを「自動」に設定している 場合、このウィジェットは MWT ライブラリの ScrolledPanel クラスに対応付けられます。「スクロールの方針」を「自動」に設定していない場合は、MWT ライブラリの ScrollablePanel クラスに対応付けられます。

ファイル選択

ファイル選択ウィジェットは、Java FileDialog クラスに対応付けられます。この Java クラスはダイアログであるため、ファイル選択ウィジェットの親シェルはこの対応付けに含まれます。両方 のウィジェットが 1 つの Java クラスになります。

ラベル

ラベルの「種類」リソースを「ピックスマップ」に設定している場合、このウィジ ェットは MWT ライブラリの ImageArea クラスに対応付けられます。それ以外の場合は、Java Label クラスに対応付けられます。

カスケードボタン

このウィジェットに関しては、対応付けは行われません。このウィジェットのラベ ルリソースは、その子であるメニューのリソースになります。

テキストフィールド

Java TextField クラスに対応付けられます。

プッシュボタン

ラベルの「種類」リソースを「ピックスマップ」に設定している場合、このウィジ ェットは、MWT ライブラリの ImageButton クラスに対応付けられます。それ以外の場合は、メニュー内にあるかどうかによって異なります。メニュー 内にない場合は、Java Button クラスに対応付けられます。プルダウンメニュー内にある場合は、MenuItem クラスに対応付けられます。オプションメニュー内にある場合は、ラベルリソースは親である Choice クラスのリソースとしてそのまま残されます。

オプションメニュー

オプションメニューのラベルウィジェットにラベルリソースを設定している場合、 オプションメニューは、子として 1 つの Label と 1 つの Choice をもつ、FlowLayout クラスと組み合わせた Panel クラスに対応付けられます。ただし、オプションメニューの子である Label にラベルリソースを設定していない場合は、オプションメニューは Choice クラスに対応付けられます。これらのコンポーネントはすべて標準 Java クラスのものです。

テキスト

テキストウィジェットは、Java TextArea クラスに対応付けられます。

トグルボタン

トグルボタンウィジェットがメニュー内にない場合は、Java CheckBox クラスに対応付けられます。メニュー内にある場合は、Java CheckBoxMenuItem クラスに対応付けられます。

セパレータ

セパレータウィジェットがメニュー内にある場合は、ラベルがダッシュ (-) に設定された上で、Java MenuItem クラスに対応付けられます。メニュー内にない場合は、MWT ライブラリの Separator クラスに対応付けられます。

スクロールテキスト

スクロールテキストウィジェットは、Java TextArea クラスに対応付けられます。

描画ボタン

描画ボタンウィジェットは、MWT ライブラリの ImageButton クラスに対応付けられます。

スケール

スケールウィジェットに子がない場合は、MWT ライブラリの Scale クラスに対応付けられます。子がある場合は、MWT ライブラリの ScalePanel クラスに対応付けられます。

リスト

リストウィジェットは、Java List クラスに対応付けられます。

矢印ボタン

矢印ボタンウィジェットは、MWT ライブラリの Java ArrowButton クラスに対応付けられます。

スクロールバー

スクロールバーウィジェットは、Java ScrollBar クラスに対応付けられます。

スクロールリスト

スクロールリストウィジェットは、Java List クラスに対応付けられます。


1. これは、バージョン 2.0 の Visaj の場合に該当します。


前へ 次へ 目次 文書セット ホーム

サン・マイクロシステムズ株式会社
Copyright information. All rights reserved.