Draggable な Applet をJNLP で起動する

前回

blog1.mammb.com

でみた Applet を JNLP で起動してみる。

JNLPによるアプレット記述子

次世代の Java Plug-In にて、従来 Java Web Start で使用してきた JNLP がアプレットを起動するためのアプレット記述子として利用できるようになった。
アプレット記述子を JNLP により記述することで、アプレットの機能を大幅に拡張することができるようになる。

appletタグの修正

前回の Ball Applet のタグ内に jnlp_href 要素を記述。

<applet width="300" height="200">
  <param name="draggable" value="true">
  <param name="jnlp_href" value="ball_applet.jnlp">
</applet>

jnlp

jnlpファイル ball_applet.jnlp を作成。

<?xml version="1.0" encoding="utf-8"?>
<jnlp codebase="file:/C:/etc" href="ball_applet.jnlp">
  <information>
    <title>Ball Applet</title>
    <vendor>etc9</vendor>
    <offline-allowed/> 
  </information>
  <resources>
    <java version="1.5+" href="http://java.sun.com/products/autodl/j2se" />
    <jar href="BallApplet.jar" main="true" />
  </resources>
  <applet-desc 
    name="Ball Applet"
    main-class="etc9.BallApplet"
    width="300"
    height="200">
  </applet-desc>
</jnlp>

ここではWebサーバを使用せずにローカルのファイルで確認を行うため、codebase にはローカルファイルのパスを記述。このパスに ball_applet.jnlp と BallApplet を jar に固めて配置。

動作確認

前回と同様に動作が確認できます。

前回と違う点は、ブラウザからドラッグした段階で、JNLPがローカルにキャッシュされ、ローカルから直接起動できるようになっています。
コマンドプロンプトから

>javaws -viewer

とすると、以下のようにキャッシュされたJNLPが一覧されます。ここから直接実行したり、ショートカットを作成することができます。

Draggable Applet のカスタマイズ

JNLP から Applet を起動すると、Draggable Applet をカスタマイズできます。例えばApplet内に以下の記述を追加することで、Applet のドラッグにAltキーを不要にできます。MouseEvent にてドラッグ可能な領域を制御したりすることもできます。

public boolean isAppletDragStart(MouseEvent e) {
    return true;
}


また、以下のようなメソッドにてドラッグ後に右上に出るクローズボタンを独自に定義することもできるようになります。

public void setAppletCloseListener(ActionListener l)

ショートカットの作成

JNLPに以下のように shortcut 属性を加えると

<?xml version="1.0" encoding="utf-8"?>
<jnlp codebase="file:/C:/etc" href="ball_applet.jnlp">
  <information>
    <title>Ball Applet</title>
    <vendor>etc9</vendor>
    <offline-allowed/>

    <shortcut online="false">
      <desktop/>
      <menu submenu="Ball Applet"/>
    </shortcut>

  </information>
  <resources>
    <java version="1.5+" href="http://java.sun.com/products/autodl/j2se" />
    <jar href="BallApplet.jar" main="true" />
  </resources>
  <applet-desc 
    name="Ball Applet"
    main-class="etc9.BallApplet"
    width="300"
    height="200">
  </applet-desc>
</jnlp>

Appletをドラッグした場合に以下のダイアログが出て、ローカルへのショートカットの作成を行うことができます。