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

前
 
次
 

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: 登録対象のウィンドウ・インスタンス。