ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Helpによるヘルプ・システムの開発
12c(12.1.2)
E48092-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: 登録対象のウィンドウ・インスタンス。