ページの先頭行へ戻る
Interstage Studio J Business Kit 解説書
FUJITSU Software

2.3.10 アプレットのアクティブ/非アクティブ状態の通知

JBKプラグインを使用した場合のアプレットのアクティブ状態とその通知を説明します。

ブラウザ上でアプレットを実行する場合には、1つのブラウザウィンドウ上に複数のアプレットを置いて実行することができます。このため、ブラウザウィンドウのアクティブ状態と各アプレットのアクティブ状態は必ずしも一致しません。

JBKプラグインでは、アプレットのアクティブ状態を独自に定め、そのアクティブ状態が切り替わるタイミングをアプレットに通知する機能を提供しています。複数のアプレットからなるシステムで、アプレットごとに動作環境を切り替えたい場合などに、この通知を使用すると便利です。

アプレットのアクティブ/非アクティブ状態

JBKプラグインは、以下のいずれかの状態になった場合にアプレットがアクティブ状態になったものとみなします。

また、以下のいずれかの状態の場合に、アプレットが非アクティブ状態になったとみなします。

アクティブ/非アクティブ状態の通知イベント

JBKプラグインは、アプレットのアクティブ状態が切り替わったときに、PluginAppletEventをアプレットに通知します。PluginAppletEventクラスはJBKプラグインが提供するイベントクラスです。

PluginAppletEventクラスのAPIは以下のとおりです。

アクティブ/非アクティブ状態の通知を受け取る方法

アプレットがJBKプラグインからのアクティブ/非アクティブ状態の通知を受け取って処理を行うためには、以下の手順に従ってください。

  1. 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

          アプレットに通知されたイベント

  2. 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ファイルが含まれていることを確認してください。

アクティブ/非アクティブ状態の通知に対する処理を行うアプレットの実装例

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;
        }
    }
}

ポイント

ブラウザアクティブ時の強制アクティブ化

ブラウザがアクティブ状態になったときにアプレットをアクティブ状態に設定することができます。jbkplugin.propertiesの中に以下の行を記述してください。

jbk.plugin.sw.fbc.force_activate=<ブラウザアクティブ時にアプレットをアクティブ化させる/アクティブ化しない>

<ブラウザアクティブ時にアプレットをアクティブ化させる/アクティブ化しない>には、以下のどちらかを設定してください。

true

ブラウザアクティブ時にアプレットをアクティブ化させます。

false

ブラウザアクティブ時にアプレットをアクティブ化しません。

デフォルト状態では、jbk.plugin.sw.fbc.force_activateの値はfalseに設定されています。 trueを設定し、ブラウザのウィンドウに複数のアプレットが表示されている場合、どのアプレットがアクティブ化されるかは保証されません。

なお、Internet Explorer 7以降は、ブラウザがアクティブ状態になった時には、直前にフォーカスを持っていた部品にフォーカスが戻されるため、上記プロパティの設定は基本的には不要です。