draggable applets (en JavaFX script pour l’exemple)
Par Patrick CHAMPION, jeudi 29 mai 2008 à 22:36 :: Java :: #42 :: rss
Une des nouveautés (introduite par java6 update 10 et le
nouveau plug-in d’applet) ayant provoqué beaucoup d’intérêt à JavaOne est de
pouvoir exécuter une applet aussi bien dans le browser qu’en dehors du
browser, en la drag and dropant. Le but de cette nouveauté est de fournir une
nouvelle façon de déployer une application depuis internet (drag and drop d’une
application s’exécutant dans le browser vers le desktop) et d’unifier le
développement des applications, qu’elles s’exécutent dans le browser (applet)
ou en dehors du browser (desktop application).
Bon je sais comme ça, ça n’a pas l’air très sexy…
Alors je vous ai fait un petit screencast de la chose.
Le scenario du
screencast
Dans ce screencast, je commence par exécuter une applet dans le browser
de la façon la plus classique qu'il soit…
puis, tout en continuant à s’exécuter, je la drag and drop vers le bureau pour
qu’elle s’exécute en dehors du browser. A ce moment, l’applet s’exécute comme
une application desktop et le fait de la fermer va la faire retourner dans le
browser.
Je recommence le drag and drop de l’applet et je ferme le browser, l’applet en
mode application desktop continue de fonctionner et me propose de créer un
raccourci sur le bureau.
Je ferme l’applet et je la relance comme une application desktop (Java Web
Start) normale à partir du raccourci. Puis je relance l’applet dans le browser
pour montrer que les deux peuvent fonctionner ensemble.
En plus du nouveau mode de déploiement, ce petit scénario montre comment on peut
exécuter la même application aussi bien dans un browser que en dehors et ce
sans rien changer au code de l’application, ni à rien d’autre du reste.
Maintenant comment ca marche tout ca …
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/
- 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">

Commentaires
1. Le vendredi 22 août 2008 à 02:22, par regime
2. Le jeudi 11 septembre 2008 à 11:58, par Patrick CHAMPION
3. Le lundi 22 décembre 2008 à 06:30, par alain63720
4. Le dimanche 15 février 2009 à 16:23, par creation site internet
5. Le lundi 25 mai 2009 à 11:45, par suan
6. Le lundi 5 juillet 2010 à 14:40, par paper writer
7. Le mercredi 7 juillet 2010 à 02:39, par Bridesmaid dresses
8. Le jeudi 15 juillet 2010 à 22:23, par roulette system
9. Le mardi 20 juillet 2010 à 07:16, par nike sb
10. Le vendredi 23 juillet 2010 à 07:32, par Hockey jerseys
11. Le lundi 9 août 2010 à 13:09, par location voiture Marrakech
12. Le vendredi 20 août 2010 à 10:22, par radio station transmitter
13. Le dimanche 22 août 2010 à 08:20, par freelance writing jobs
14. Le lundi 23 août 2010 à 06:45, par xiaopohai
15. Le mardi 24 août 2010 à 07:17, par fm stereo transmitter
16. Le mardi 24 août 2010 à 07:23, par poker tables
17. Le mardi 24 août 2010 à 07:27, par radio station transmitter
18. Le mardi 24 août 2010 à 07:28, par fm stereo transmitter
19. Le mardi 24 août 2010 à 10:53, par Christian Louboutin
20. Le vendredi 27 août 2010 à 08:51, par custom papers
21. Le samedi 28 août 2010 à 00:02, par jenn air grill
22. Le lundi 30 août 2010 à 09:41, par paris hilton perfume
23. Le mercredi 1 septembre 2010 à 13:06, par jouer casino
24. Le jeudi 2 septembre 2010 à 04:51, par ffd
25. Le jeudi 2 septembre 2010 à 13:26, par huu
26. Le jeudi 2 septembre 2010 à 13:26, par huu
Ajouter un commentaire