JBKプラグインを使用した場合のアプレットのアクティブ状態とその通知を説明します。
ブラウザ上でアプレットを実行する場合には、1つのブラウザウィンドウ上に複数のアプレットを置いて実行することができます。このため、ブラウザウィンドウのアクティブ状態と各アプレットのアクティブ状態は必ずしも一致しません。
JBKプラグインでは、アプレットのアクティブ状態を独自に定め、そのアクティブ状態が切り替わるタイミングをアプレットに通知する機能を提供しています。複数のアプレットからなるシステムで、アプレットごとに動作環境を切り替えたい場合などに、この通知を使用すると便利です。
アプレットのアクティブ/非アクティブ状態
JBKプラグインは、以下のいずれかの状態になった場合にアプレットがアクティブ状態になったものとみなします。
アプレット上の部品にキーボードフォーカスが設定された場合
アプレット上でマウスがクリックされた場合
また、以下のいずれかの状態の場合に、アプレットが非アクティブ状態になったとみなします。
アプレットの実行が停止した後(stop()メソッドが呼び出された後)
アプレット上の部品から、そのアプレット以外のウィンドウにキーボードフォーカスが移った場合
アプレットを表示しているブラウザのウィンドウが非アクティブになった場合
他のアプレットがアクティブな状態になった場合
アクティブ/非アクティブ状態の通知イベント
JBKプラグインは、アプレットのアクティブ状態が切り替わったときに、PluginAppletEventをアプレットに通知します。PluginAppletEventクラスはJBKプラグインが提供するイベントクラスです。
PluginAppletEventクラスのAPIは以下のとおりです。
クラス名
com.fujitsu.jbk.plugin.browser.PluginAppletEvent
(extends java.awt.AWTEvent)
定数
PLUGINAPPLET_ACTIVATE
アプレットがアクティブ状態になったことを表すイベントIDです。
public final static int PLUGINAPPLET_ACTIVATE |
PLUGINAPPLET_DEACTIVATE
アプレットが非アクティブ状態になったことを表すイベントIDです。
public final static int PLUGINAPPLET_DEACTIVATE |
コンストラクタ
PluginAppletEvent
public PluginAppletEvent(Object source, int id) |
イベントが発生したアプレット
発生したイベントの種類を表すID
ポイント
通知条件
アプレットに最初に通知するのはPLUGINAPPLET_ACTIVATEです。
非アクティブ状態のウィンドウのアプレットが開始されたときは、ウィンドウが非アクティブ状態であるためPluginAppletEventは通知しません。
非アクティブ状態のウィンドウのアプレットが開始されたときでも、PLUGINAPPLET_ACTIVATEのPluginAppletEventを通知するためには、jbkplugin.propertiesの中に以下の行を記述してください。
jbk.plugin.sw.event.initial_active=true |
アクティブ/非アクティブ状態の通知を受け取る方法
アプレットがJBKプラグインからのアクティブ/非アクティブ状態の通知を受け取って処理を行うためには、以下の手順に従ってください。
PluginAppletEventを受け取るためのイベントリスナを作成します。
PluginAppletEventを受け取るためのイベントリスナは、PluginAppletListenerインタフェースを実装して作成します。PluginAppletListenerインタフェースはJBKプラグインが提供するイベントリスナインタフェースです。
PluginAppletEventインタフェースのAPIは以下のとおりです。
インタフェース名
com.fujitsu.jbk.plugin.browser.PluginAppletListener
(extends java.util.EventListener)
メソッド
eventOccurred
JBKプラグインがアプレットに通知するイベントを受け取ります。
public abstract void eventOccurred(PluginAppletEvent event) |
event
アプレットに通知されたイベント
PluginAppletContextクラスを用いて、作成したイベントリスナを登録します。
作成したイベントリスナは、PluginAppletContextインタフェースのメソッドを用いて登録します。イベントリスナ登録/登録解除および、アプレットを明示的にアクティブにするためのAPIは以下のとおりです。
インタフェース名
com.fujitsu.jbk.plugin.browser.PluginAppletContext
(extends java.applet.AppletContext)
メソッド
addPluginAppletListener
JBKプラグインからのイベント通知を受け取るリスナを登録します。
public abstract void addPluginAppletListener(PluginAppletListener listener) |
listener
登録するイベントリスナ
removePluginAppletListener
JBKプラグインからのイベント通知を受け取るリスナを登録します。
public abstract void removePluginAppletListener(PluginAppletListener listener) |
listener
登録を解除するイベントリスナ
activateApplet
引数で渡したアプレットがこのコンテキストに属する場合、アプレットをアクティブな状態にします。このコンテキストに属さないアプレットの場合には何もしません。
public abstract void activateApplet(Applet applet) |
applet
アクティブな状態にするアプレット
PluginAppletEventクラス、PluginAppletListenerインタフェースおよび、PluginAppletContextインタフェースのクラスファイルは、JBKプラグインの開発用jarファイルに 格納されています(JBKをインストールしたフォルダ配下の“classes\jbkstd.jar”になります)。これらのクラスおよびインタフェースを使用したアプレットのクラスをコンパイルする場合は、クラスパスにJBKプラグインの開発用jarファイルが含まれていることを確認してください。
注意
アプレット上にフォーカスがある状態で、スクリプト呼び出しによりアプレットを貼り付けている領域を非表示にした場合
JBKプラグインはアプレットがフォーカスを失ったことによりPLUGINAPPLET_DEACTIVATEのPluginAppletEventを通知します。しかし、Javaとしてのウィンドウのアクティブ状態は、アクティブのままとなっています。そのため、この状態の時にアプレット上の部品に対してrequestFocusInWindow()メソッドを呼び出した場合、requestFocusInWindow()が成功してフォーカスが設定され、JBKプラグインもPLUGINAPPLET_ACTIVATEを通知します。
例
アクティブ/非アクティブ状態の通知に対する処理を行うアプレットの実装例
PluginAppletContextは、AppletクラスのgetAppletContext()メソッドを呼び出して取得できます。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import com.fujitsu.jbk.plugin.browser.PluginAppletEvent;
import com.fujitsu.jbk.plugin.browser.PluginAppletListener;
import com.fujitsu.jbk.plugin.browser.PluginAppletContext;
/**
* アクティブ/非アクティブ状態の通知を受け取るアプレット
* このサンプルでは、アプレットにPluginAppletListenerを実装して、
* アプレットが直接イベントを受け取るようにしている。
*/
public class ActivateSample extends Applet implements PluginAppletListener
{
/**
* アプレットの初期化
*/
public void init()
{
setBackground(Color.lightGray);
// AppletContextを取得する。
// JBKプラグインを使用しているときには、PluginAppletContextが返る。
AppletContext context = getAppletContext();
try {
// 取得したAppletContextがPluginAppletContextかどうかを確認する。
if (context instanceof PluginAppletContext) {
PluginAppletContext plgContext = (PluginAppletContext)context;
// JBKプラグインからのイベントを受け取るリスナを登録する。
plgContext.addPluginAppletListener(this);
}
} catch (Throwable ignore) { /* この処理で発生した例外に対しては何も行わない */ }
}
/**
* JBKプラグインからイベントが通知されたときの処理。
* このサンプルでは、アクティブ/非アクティブ状態の切り替わりに応じて
* アプレットの色を変更している。
*/
public void eventOccurred(PluginAppletEvent e) {
switch (e.getID()) {
case PluginAppletEvent.PLUGINAPPLET_ACTIVATE:
// アプレットがアクティブ状態になった場合
setBackground(Color.red);
repaint();
break;
case PluginAppletEvent.PLUGINAPPLET_DEACTIVATE:
// アプレットが非アクティブ状態になった場合
setBackground(Color.lightGray);
repaint();
break;
default:
break;
}
}
} |