ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Help開発者ガイド
11g リリース2(11.1.2.3.0)
B71911-01
  目次
目次

戻る
戻る
 
次へ
次へ
 

B Javaモーダル・ウィンドウの問題への対処

この付録では、モーダル・ウィンドウに状況依存のヘルプ・トピックを表示しようとすると問題が発生する場合、Javaでそのモーダル・ウィンドウがどのように処理されるかについて説明します。モーダル・ウィンドウとは、そのウィンドウから制御を移動できないウィンドウのことです。モーダルではないウィンドウとは、他のウィンドウに制御の切替えが可能なウィンドウのことです。

この付録の構成は、次のとおりです。

B.1 Javaモーダル・ウィンドウの問題について

ユーザーがモーダルではないウィンドウからヘルプを要求した場合は、ヘルプ・ウィンドウと要求元ウィンドウを自由に切り替えることができます。ただし、モーダル・ウィンドウからヘルプを要求した場合は切替えを行うことができません。Javaでは、モーダル・ウィンドウは、さらに別のモーダル・ウィンドウを除いて、Java仮想マシンによって生成された他のウィンドウへのアクセスをすべてブロックします。このため、ヘルプがモーダル・ウィンドウから要求された場合、OHJはモーダルなヘルプ・ウィンドウにヘルプを表示する必要があります。OHJ自体がモーダル・ウィンドウに表示されるため、アプリケーションに戻るには、ヘルプ・ウィンドウを閉じる必要があります。

ヘルプが要求されると、OHJは、そのアクティブ・ウィンドウがモーダルかどうかを判別します。モーダルである場合は、通常のOHJトピック・ウィンドウおよびOHJナビゲータ・ウィンドウの親を、新規のモーダル・ウィンドウに変更します。新規ウィンドウはユーザーのディスプレイのフォアグラウンドに表示されるため、ユーザーは、このウィンドウと対話できます。実際に、このモーダルなヘルプ・ウィンドウを閉じる場合には対話が必要となります。Javaでのモダリティの実装は綿密ではないため、この方法が、OHJが現在サポートしているJava仮想マシンで機能する唯一の解決策です。

B.2 ウィンドウの登録

OHJの回避策が機能するためには、OHJは現在アクティブであるウィンドウを追跡できる必要があります。registerClientWindow()メソッドを使用し、作成する各ウィンドウ(フレームまたはダイアログ)をHelpオブジェクトに登録します。

表B-1 registerClientWindow()メソッド

コンストラクタ 説明

registerClientWindow(Window aWindow)

Helpオブジェクトに登録されたウィンドウ・インスタンスを追跡します。アクティブ・ウィンドウがモーダル・ダイアログである場合にヘルプが要求されると、Helpオブジェクトは、アクティブなモーダル・ダイアログがヘルプ・ウィンドウをブロックしないように、特別な処理を行います。

パラメータ:

  • aWindow: 登録対象のウィンドウ・インスタンス。


B.3 ウィンドウの登録解除

Help.registerClientWindow()を使用してウィンドウ・オブジェクトを登録した場合は、これらのオブジェクトを登録解除する必要があります。ウィンドウがアクティブではなくなったと判断した場合、unregisterClientWindow()を使用して、そのHelpオブジェクトでのウィンドウの登録を解除します。ウィンドウ・インスタンスの登録解除に失敗すると、そのウィンドウはガベージ・コレクションの対象外となることに注意してください。

表B-2 unregisterClientWindow()メソッド

メソッド 説明

unregisterClientWindow(Window aWindow)

クライアントは、registerClientWindow()を使用して登録したウィンドウ・インスタンスのウィンドウがアクティブではなくなると、その登録を解除する必要があります。登録解除に失敗すると、そのウィンドウはガベージ・コレクションの対象外となります。

パラメータ:

  • aWindow: 登録対象のウィンドウ・インスタンス。