Mixer Java3D et Swing
Par
Romain Guy (home) Tutoriel d'introduction sur l'utilisation de l'API Java3D avec la librairie graphique Swing. I. Démonstration avec Java Web Start II. Explications III. Téléchargements I. Démonstration avec Java Web Start
II. Explications
Vous êtes vous jamais demandé comment utiliser de jolis composants 3D avec Swing ? Java3D est la solution. Soit, à première vue, Java3D ne vous permet pas d'intégrer facilement des scènes 3D dans vos UI. Si vous avez vu les videos de démonstration du produit Avalon de Microsoft, vous voyez de quoi je parle. Avalon ne sera pas disponible avant pplusieurs mois, mais Java et Java3D, eux, sont déjà là.
Grâce à une simple astuce, vous pouvez créer des applications Swing stupéfiantes. Voici un exemple :
Notez le dégradé du background, que j'ai mis afin de montrer l'union entre Swing et Java3D. Avant de rentrer dans les détails, regardons ce dont est capable cette application. Je l'ai appelée AmazonPick car elle serait une superbe interface pour une application de recherche de livres. Les livres correspondant à votre recherche seraient affichés sous forme de boutons en bas de la fenêtre (dans cet exemple, les boutons sont codés en dur). Quand vous cliquez sur l'un d'entre eux, le livre en 3D tourne pour montrer la nouvelle couverture sur l'autre face. Du plus bel effet.
![]()
Pour réaliser celà, j'ai simplement créé une texture Java3D sur laquelle j'ai dessiné le background de la fenêtre. Voici le code source, xpanel étant le content pane de la fenêtre et c3d le Canvas3D sur lequel la scène est dessinée :
Bien que cette astuce soit facile à implémenter, elle requiert qu'une texture du background soit réalisée. Dans notre cas, celà veuut dire que l'on doit d'abord montrer la fenêtre. L'utilisateur verra donc un rectangle gris pendant un instant.
L'utilisation de Java3D a beaucoup d'avantages mais requiert quelques astuces pour fonctionner parfaitement. Un Canvas Java3D est un composant lourd (heavyweight) alors que Swing contient des composants légers (lightweight). Le résultat est que les composants Swing seront dessinés sous le canvas Java3D. Les équipes Swing et Java3D sont au courant de ce problème et il existe une solution simple.
Avec Java3D 1.3.1 une meilleure solution existe. Vous pouvez utiliser un Canvas3D pour réaliser le rendu offscreen. C'est à dire que vous pouvez faire tout le travail de rendu dans un buffer et dessiner directement le résultat dans un composant Swing (avec un JComponent personnalisé ou une ImageIcon). Naturellement, celà nécessite un peu plus de travail.
Vous pouvez télécharger cette démonstartion et ses sources afin de voir comment réaliser celà. Vos aurez besoin de Java3D 1.3 et J2SE 1.4 (peut-être moins, une version supérieure est bien aussi). Si vous avez seulement J2SE 1.4, vous pouvez changer une ou deux lignes de code dans BooksDemo.java pour vous débarasser des generics et recompiler le tout tranquillement.
Faites moi savoir si vous avez utilisé cette astuce avec succès.
III. Téléchargements |
Les sources présentées sur cette page sont libres de droits, et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2005 Romain Guy. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.