D’abord il faut absolument Java 6 update 10 b23 minimum comme java runtime, et, à ma connaissance, seuls les browser IE6, IE 7 et Firefox 3 prennent en compte le nouveau plug-in d’applet contenu dans Java 6 update 10.
Ensuite, il faut une applet et pour cela, j’ai choisi de réutiliser celle écrite dans mon précédent post sur les animations en JavaFX.
Allez, on se met au boulot

1-Rendre une applet draggable

Pour rendre une applet draggable, c’est relativement simple …
il suffit de mettre le paramètre d’applet dragabble à true

<param name="draggable" value="true">

 

Code de la page Html contenant l’applet

<html>
  <body>
    <table border=1>
           <tr><td>
    <applet code="javafx.ui.Applet" width=400 height=300 border=25
     archive="javafxrt.jar,Scenario.jar,altianimlinear.jar">
        <param name="AppletClass" value=" javafxalti.AltiAnimApplet">
        <param name="draggable" value="true">
    </applet>
          </td></tr>
    </table>
  </body>
</html>

Maintenant nous pouvons drag an dropper notre applet (ALT + left click + drag) et elle s’exécute hors du browser. Mais c’est tout, elle ne s’enregistre pas comme une application desktop (Java Web start) et il est donc impossible de la lancer comme une application desktop, c’est juste une applet s’exécutant hors du browser.

Pour que l’applet devienne une vraie application desktop, il faut utiliser une autre nouveauté de Java6 update 10 : la possibilité de lancer une applet à partir d’un fichier jnlp (le même que Java Web Start).

2-Rendre une applet draggable avec jnlp

Pour cela il faut écrire un descripteur de déploiement jnlp et modifier un peu la page HTML

Le jnlp

<jnlp spec="1.0+"
      codebase="file:/
I:/dev.java/src.javafx/appletdd-package/applet_draggable_jnlp_1"
      href="AppletAltiAnimLinear.jnlp">
    <information>
        <title>Alti Animation Linear</title>
        <vendor>Alti.com</vendor>
        <description>Animation JavaFX Script applet jnlp</description>
        <description kind="short">AltiAnimJFX</description>
        <homepage href="http://blogexpertease.alti.com"/>        
        <offline-allowed/>
        <shortcut online="true">
        <desktop/>
        <menu submenu="Alti Applet"/>
        </shortcut>
    </information>
    <resources>
        <j2se version="1.6+"/>
        <jar href="altianimlinear.jar"  download="eager"/>
        <jar href="javafxrt.jar" download="eager"/>
        <jar href="Scenario.jar" download="eager"/>
    </resources>
  <applet-desc
      name="Alti Animation Linear"
      main-class="javafx.ui.Applet"
<!-- Currently used when relaunching from the desktop shortcut -->
      width="400"
      height="300">
      <param name="AppletClass" value=" javafxalti.AltiAnimApplet">
  </applet-desc>
</jnlp>


Par rapport à un fichier jnlp d’une application desktop classique, on remarque que l’on a un tag applet-desc à la place du tag application-desc .

Pour mon exemple, étant donnée que je l’exécute en local sans serveur web, le codebase est une url de type fichier absolue.

La page html

Maintenant il faut modifier un peu les paramètres du tag applet de la page html pour que le plug-in utilise le jnlp. Pour ce la rien de plus simple, il suffit d’assigner au paramètre d’applet jnlp_ref le fichier jnlp à utiliser pour lancer l’applet.

<param name="jnlp_href" value="AppletAltiAnimLinear.jnlp">

 

Code le la page html contenant l’applet

<html>
  <body>  
    <table border=1>
           <tr><td>
    <applet code="javafx.ui.Applet" width=400 height=300 border=1>
        <param name="AppletClass" value=" javafxalti.AltiAnimApplet">
        <param name="jnlp_href" value="AppletAltiAnimLinear.jnlp">
        <param name="boxborder" VALUE="true">
        <param name="draggable" value="true">
    </applet>  
          </td></tr>
    </table>
  </body>
</html>

 

Et là, normalement, c’est fini et cela fonctionne, enfin cela fonctionnerait pour une applet java classique, mais pas pour mon applet JavaFX…

Dans le jnlp, l’attribut main-class du tag applet-desc doit contenir le nom de la classe java contenant l’applet et pas le javafx.ui.Applet avec en paramètre le nom de la classe java à lancer. Pour résoudre le problème il faut utiliser la deuxième méthode d’écriture d’une applet en JavaFX script.

3-Rendre une applet draggable avec jnlp en JavaFX

Dans mon précédent post pour écrire mon applet j’avais fait ceci :

...
var altiAnimModel = AltiAnimModel {}
  
altiAnimModel.anim.start();

Applet {
  content:
    Canvas {
      content:
        ImageView {
          transform: 
          bind [Transform.translate(altiAnimModel.x, altiAnimModel.y)]
          image: Image {url: altiAnimModel.imageURL}
        }
    }
}

Pour écrire une applet en utilisant la deuxième méthode il l’écrire comme cela :

...
public class AltiAnimApplet2 extends Applet {
}

var altiAnimModel = AltiAnimModel {}
  
altiAnimModel.anim.start();


Canvas {
  content:
    ImageView {
      transform: 
      bind [Transform.translate(altiAnimModel.x, altiAnimModel.y)]
      image: Image {url: altiAnimModel.imageURL}
    }
}

 

Ensuite, il faut modifier l’attribut main-class du tag applet-desc du jnlp pour lui indiquer que l’applet est maintenant AltiAnimApplet2 et modifier l’attribut code du tag applet dans la page html pour lui fournir la même information.

Nouveau fichier jnlp

<jnlp spec="1.0+" 
      codebase="file:/
I:/dev.java/src.javafx/appletdd-package/applet_draggable_jnlp_2" 
      href="AppletAltiAnimLinear2.jnlp">
    <information>
        <title>Alti Animation Linear 2</title>
        <vendor>Alti.com</vendor>
        <description>Animation JavaFX Script applet 2 jnlp
        </description>
        <description kind="short">AltiAnimJFX 2</description>
        <homepage href="http://blogexpertease.alti.com"/>        
        <offline-allowed/>
        <shortcut online="true">
        <desktop/>
        <menu submenu="Alti Applet 2"/>
        </shortcut>
    </information>
    <resources>
        <j2se version="1.6+"/>
        <jar href="altianimlinear2.jar"  download="eager"/>
        <jar href="javafxrt.jar" download="eager"/>
        <jar href="Scenario.jar" download="eager"/>
    </resources>
  <applet-desc
      name="Alti Animation Linear 2"
      main-class="javafxalti.AltiAnimApplet2"
  <!-- Currently used when relaunching from the desktop shortcut -->
      width="400"
      height="300">
  </applet-desc>
</jnlp>

Nouvelle page html

<html>
  <body>
    <table border=1>
           <tr><td>
    <applet code="javafxalti.AltiAnimApplet2" width=400 height=300
          border=1>
        <param name="jnlp_href" value="AppletAltiAnimLinear2.jnlp">
        <param name="draggable" value="true">
    </applet>  
          </td></tr>
    </table>
  </body>
</html>

Et voilà, tout fonctionne normalement et avec l’utilisation d’un fichier jnlp pour les applets, il est aussi possible de déployer directement les applets comme des applications desktop (Java Web Start standard) en fournissant un lien sur le fichier jnlp.

4 -Les liens

https://jdk6.dev.java.net/plugin2/

https://jdk6.dev.java.net/plugin2/jnlp/

Les sources des projets

- le répertoire applet_draggable correspond à l’exemple 1 (Rendre une applet draggable ) avec les sources .
- le répertoire applet_draggable_jnlp_1 correspond à l’exemple 2 (Rendre une applet draggable avec un jnlp) avec les sources.
- le répertoire applet_draggable_jnlp_2 correspond à l’exemple 3 (Rendre une applet draggable avec jnlp en JavaFX) avec les sources.

Note : pour que les exemples fonctionnent chez vous, il ne faut pas oublier de modifier l’attribut codebase des fichiers jnlp pour qu’il corresponde au chemin ou se trouve vos jnlp.

<jnlp spec="1.0+" codebase="file:/I:/dev.java/src.javafx/appletdd-package/applet_draggable_jnlp_1" href="AppletAltiAnimLinear.jnlp">