Afficher des animations Flash dans les composants SWING

Mohamed Slim

Adobe Flash est un logiciel multimédia incontournable qui permet de créer des animations graphiques et des objets interactifs.
Cet article est destiné aux développeurs Java qui souhaitent ajouter des animations Flash dans leurs composants SWING dans un environnement Windows.
Commentez

- Titre : Afficher des animations Flash dans les composants SWING

- Auteur : Mohamed Slim

- Parution : 15 juillet 2010

- Mise à jour : 27 novembre 2019

- Licence :

Sommaire

- I. Introduction

- II. Présentation de l'API JFlashPlayer

- III. Étude de cas : intégrer une animation Flash dans une fenêtre Java

- III-A. Configurations nécessaires

- III-B. Implémentation

- IV. Liens utiles

- V. Conclusion

- VI. Remerciements

I - Introduction

Pour ceux qui connaissent le logiciel Flash, il est certes aussi facile de créer des animations vectorielles en Flash qu'en Java.
Ces animations peuvent varier d'un simple mouvement rectiligne d'un objet graphique, à la création d'une séquence de dessins animés.
La création de ces animations est rendue facile et rapide grâce à la richesse et la convivialité de l'IDE Flash qui est actuellement en version CS5.

Interface de travail du logiciel Flash CS5

Les animations Flash portent l'extension .SWF. Ce format de publication est connu pour sa grande capacité multimédia vu qu'on peut y incorporer des dessins vectoriels, des images, des sons waves ou mp3, comme on peut aussi ajouter de la vidéo.
Penser à intégrer ces animations à vos conteneurs SWING sera sûrement une idée originale.
La firme Apple fournit le plug-in QuickTime pour permettre de lire différents formats multimédias notamment les fichiers .SWF. Les fonctionnalités sont réduites et les versions récentes de Flash player ne sont pas supportées par ce plug-in, ce qui nous emmène à délaisser cette technologie.
Une autre technologie qui peut être utilisée pour afficher les fichiers .SWF en Java est l'API JFlashPlayer qui permet de plus le contrôle des animations Flash avec des instructions Java.

II - Présentation de l'API JFlashPlayer

Cette API est actuellement dans sa version 2.0. Elle fait partie du paquetage JPackages qui contient une collection de bibliothèques qui peuvent s'interfacer avec les API Java standards.
Cette API fournit plusieurs fonctionnalités pour manipuler les fichiers SWF :

- lire des animations Flash avec un contrôle pour arrêter, rembobiner, lire en boucle, etc. ;

- appeler des méthodes Java à partir du code ActionScript (langage script propriétaire fourni avec l'IDE Flash) ;

- appeler des fonctions créées en ActionScript dans les classes Java ;

- installer le plug-in Flash player dynamiquement s'il n'existe pas sur la machine au préalable ;

- etc.

Cette API peut être utilisée seulement sous un environnement Windows notamment Windows 98, Me, NT4, 2000, XP et Vista. Les auteurs de l'API ne prévoient pas de créer des versions pour les systèmes Linux et Mac OS.
On ne peut pas utiliser cette API dans les applets pour plusieurs raisons, y compris le niveau de sécurité fourni par les applets.

III - Étude de cas : intégrer une animation Flash dans une fenêtre Java

III-A - Configurations nécessaires

Pour fonctionner, JFlashPlayer exige l'inclusion de bibliothèques natives d'extension .dll qui doivent être spécifiées dans la variable d'environnement PATH.
Il faut donc installer Le Flash player sur la machine pour que l'API puisse fonctionner. S'il est déjà installé, ce player peut être détecté, sinon on peut l'installer dynamiquement avec les méthodes fournies par l'API.
Les versions JRE supportées par l'API sont : 1.4, 1.5 et 1.6.
- Sur le site de l'API, vous trouvez un zip qu'il faut télécharger et décompresser.
Ce paquetage contient une archive jflashplayer.jar qui doit être spécifiée dans la CLASSPATH de votre IDE Java pour pouvoir travailler avec l'API.

III-B - Implémentation

Dans cette partie, je vais présenter le code d'une application qui permet de lire et contrôler des animations Flash en Java.
Cette application est composée d'une seule classe « Lecteur » qui crée une instance de la classe JFrame pour afficher une fenêtre dans laquelle on va intégrer une animation Flash.

Lecteur flash

Au début, il faut créer le menu « Fichier » composé de six commandes permettant la lecture et le contrôle du contenu SWF.

private void créerMenu()
{
getContentPane().setBackground(Color.WHITE);

setJMenuBar(menuBar);

menuBar.add(fichierMenu);
fichierMenu.setText("Fichier");

fichierMenu.add(menuOuvrir);
menuOuvrir.addActionListener(this);
menuOuvrir.setText("Ouvrir");

fichierMenu.add(menuLire);
menuLire.setText("Lire");
menuLire.addActionListener(this);

fichierMenu.add(menuArreter);
menuArreter.setText("Arréter");
menuArreter.addActionListener(this);

fichierMenu.add(menuArriére);
menuArriére.setText("Arriére");
menuArriére.addActionListener(this);

fichierMenu.add(menuAvant);
menuAvant.setText("Avant");
menuAvant.addActionListener(this);

fichierMenu.add(menuRebombiner);
menuRebombiner.setText("Rebombiner");
menuRebombiner.addActionListener(this);

}

Pour gérer les appuis sur ces menus de commandes, on doit redéfinir la méthode actionperformed() de l'interface ActionListener :

public void actionPerformed(ActionEvent menuSelectionné)
{

try {
if (!FlashPanel.hasFlashVersion("10"))

// si la version 10 du flash player n'existe pas sur la machine
// alors lancer son installation dynamiquement

FlashPanel.installFlash("10");

} catch (JFlashLibraryLoadFailedException err) {

err.printStackTrace();
}

if (menuSelectionné.getSource() == menuOuvrir) {
JFileChooser fileOuvrirSWF = new JFileChooser();
if (fileOuvrirSWF.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {

FlashPanel.setRequiredFlashVersion("10");

try {

// le deuxième paramètre est à false pour
// ne pas démarrer l'animation à son chargement

lecteurFlash = new FlashPanel(new File(fileOuvrirSWF
.getSelectedFile().getAbsolutePath()), false);
getContentPane().add(lecteurFlash);
validate();

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JFlashLibraryLoadFailedException e) {
e.printStackTrace();
} catch (JFlashInvalidFlashException e) {
e.printStackTrace();
}
}
} else if (menuSelectionné.getSource() == menuLire) {

// lancer la lecture de l'animation flash
lecteurFlash.play();

} else if (menuSelectionné.getSource() == menuArreter) {

// arrêter la lecture de l'animation
lecteurFlash.stop();

} else if (menuSelectionné.getSource() == menuArriére) {

// reculer la tête de lecture
lecteurFlash.back();

} else if (menuSelectionné.getSource() == menuAvant) {

// avancer la tête de lecture instantanément
lecteurFlash.forward();

} else if (menuSelectionné.getSource() == menuRebombiner) {

// commencer une nouvelle lecture de l'animation
lecteurFlash.rewind();

}
}

Il faut spécifier la version du Flash player installée sur la machine avec la méthode setRequiredFlashVersion() :

FlashPanel.setRequiredFlashVersion("version_flash_palyer");

Avec le code fourni en haut, on utilise la version 10.
Il faut vérifier la version du player installée sur la machine avec la méthode hasFlashVersion().

FlashPanel.hasFlashVersion("version_flash_palyer"));

Si cette la méthode retourne la valeur false, il faut donc installer cette version.

FlashPanel.installFlash("num_version");

Il vaudrait mieux travailler avec une version installée au préalable.

On peut donc afficher la liste des Flash player installés :

for(int i=0;i<13;i++)
{
System.out.println("version : "+i+" disponible ? : "+FlashPanel.hasFlashVersion(""+i));
}

IV - Liens utiles

- Installer le paquetage JFlashPlayer

- Documenation de l'API

- Télécharger Adobe Flash Player

- Adobe Flash

- Sources de l'application

V - Conclusion

L'API JFlashPlayer est certainement intéressante. Elle permet en fait de profiter de la puissance de Flash dans la création des animations pour les intégrer dans les interfaces graphiques créées en Java.
Si vous voulez encore publier des fichiers SWF en utilisant des instructions Java, vous pouvez consulter mon article traitant de l'API Transform SWF.

VI - Remerciements

Je tiens à remercier la rubrique Java de Developpez.com et son responsable Ricky81.
Je remercie aussi Jacques THERY et blade159 pour la relecture orthographique de cet article.