Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUMS JAVA FAQs TUTORIELS JAVASEARCH SOURCES LIVRES OUTILS, EDI & API ECLIPSE NETBEANS BLOG DISCUSSIONS TV

Splash Screen avec Swing et Java3D

Par Romain Guy (home)
 

Deux démonstrations de Splash Screens avec Swing et Java3D


I. Démonstrations avec Java Web Start
II. Splash Screen avec ombre
III. Splash Screen avec Java3D
IV. Téléchargements


I. Démonstrations avec Java Web Start

info Prérequis : Pour essayer ces démonstrations vous devez disposer de Java Web Start (compris avec le JRE et le JDK).
Pour la seconde, vous devez aussi installer Java3D, téléchargeable ici.
./images/java.png Lancez la démonstration (Splash screen avec ombre)

Lancez la démonstration (Splash screen avec Java3D)


II. Splash Screen avec ombre

Ok, ce n'est pas un effet vraiment innovant, mais j'ai voulu l'implémenter depuis que j'ai découvert la classe java.awt.Robot. Ca m'a pris des années, mais finallement je l'ai fait :) Quoi qu'il en soit, la classe ShadowedWindow vous permet d'afficher un splash screen avec une ombre derrière lui. L'astuce, comme vous le savez peut-être, est de capturer une partie de l'écran avec la classe Robot et de dessiner le splash screen par dessus cette capture. Cette façon de faire est très efficace et facile à implémenter, masi vous ne pouvez pas l'utiliser si votre splash screen doit rester longtemps à l'écran. Après que le "screenshot" soit fait, le splash ne peut pas refléter les changements qui arrivent derrière lui.

Capture d'écran 1
Ce n'est qu'un premier essai, je suis toujours en train de jouer avec la distance, l'opacité, la transparence et la forme de l'ombre. L'ombre montrée ici est à 4 pixels du splash, avec une transparence de 30% et utilise une forme rectangulaire. J'ai essayé avec un rectangle aux coins arrondi, le résultat semble un peu meilleur (voir ci-dessous). Si je finis par rajouter ceci à SwingFX, je permettrais au développeur de configurer toutes ces propriétés. :)

Capture d'écran 2

III. Splash Screen avec Java3D

Je viens de vous montrer comment créer un splash screen personnalisé en créant une ombre sur le bureau. Je vous ai aussi montré, dans une de mes premières démos, comment intégrer étroitement Swing et Java3D. Maintenant, j'ai décidé de combiner ces deux astuces afin de créer un splash screen 3D animé surprenant :

Capture d'écran 3
Voici le code source de ce nouveau composant :

import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import javax.media.j3d.*;
import com.sun.j3d.utils.universe.*;
public class SplashScreen3D extends JWindow {
    public SplashScreen3D(BranchGroup scene, int width, int height) {
        setSize(new Dimension(width, height));
        createCanvas3D(scene);
    }
    protected void createCanvas3D(BranchGroup scene) {
        Canvas3D canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
        canvas3D.setSize(getWidth(), getHeight());
        BufferedImage backgroundImage = createBackground();
        if (backgroundImage != null) {
	        Background background = new Background(
                  new ImageComponent2D(ImageComponent2D.FORMAT_RGB,
                                       backgroundImage));
	        BoundingSphere bounds = new BoundingSphere();
	        bounds.setRadius(100.0);
	        background.setApplicationBounds(bounds);
	        scene.addChild(background);
        }
        SimpleUniverse universe = new SimpleUniverse(canvas3D);
        universe.getViewingPlatform().setNominalViewingTransform();
        universe.addBranchGraph(scene);
        View view = universe.getViewer().getView();
        view.setSceneAntialiasingEnable(true);
        getContentPane().add(canvas3D);
    }
    protected BufferedImage createBackground() {
        setLocationRelativeTo(null);
        Rectangle windowRect = getBounds();
        try {
            Robot robot = new Robot(getGraphicsConfiguration().getDevice());
            BufferedImage capture = robot.createScreenCapture(
                                      new Rectangle(windowRect.x,
                                                    windowRect.y,
                                                    windowRect.width,
                                                    windowRect.height));
            return capture;
        } catch (AWTException e) { }
        return null;
    }
}
Comme vous pouvez le voir, le code est très simple. Quand le splash screen est créé, une capture du bureau est faite grâce à la classe Robot. L'image sert de background dans la scène Java3D. Vous pouvez télécharger le code source ci-dessous pour voir comment est créée cette scène 3D.


IV. Téléchargements



Articles et tutoriels Java
L'essentiel de Java en une heure
L'API java.nio du JDK 1.4
Inversion de contrôle en Java
L'introspection
Le Java Community Process
Conception de tests unitaires avec JUnit
Les Strings se déchaînent
Présentation de SWT
La programmation réseau en Java avec les sockets
Du bon usage de l'héritage et de la composition
Les références et la gestion de la mémoire en Java
Constructeurs et méthodes exportées en Java
Les membres statiques, finaux et non immuables en Java
Les classes et objets immuables en Java
Comprendre et optimiser le Garbage Collector
Les principes de la programmation d'une interface graphique
Les opérateurs binaires en Java
Prenez le contrôle du bureau avec JDIC
Les Java Data Objects (JDO version 1.0.1)
La persistance des données avec Hibernate 2.1.8
Journalisation avec l'API Log4j
Java 5.0 et les types paramétrés
Les annotations de Java 5
Java 1.5 et les types paramétrés
Créer un moteur de recherche avec Lucene
Articles et tutoriels Swing
Threads et performance avec Swing
Rechercher avec style en utilisant Swing
Splash Screen avec Swing et Java3D
Drag & Drop avec style en utilisant Swing
Attendre avec style en utilisant Swing
Mixer Java3D et Swing
Articles et tutoriels Java Web
Redécouvrez le web avec Wicket

Valid XHTML 1.1!Valid CSS!

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.

Responsables bénévoles de la rubrique Java : Christophe Jollivet et Eric Siber - Contacter par EMail :
Vos questions techniques : forum d'entraide Java - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.