ページの先頭行へ戻る
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ファイルが含まれていることを確認してください。

注意

アプレット上にフォーカスがある状態で、スクリプト呼び出しによりアプレットを貼り付けている領域を非表示にした場合

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