Splash Screen avec Swing et Java3D

Deux démonstrations de Splash Screens avec Swing et Java3D

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Démonstrations avec Java Web Start

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 via l'implémentation fournie par JogAmp, téléchargeable ici.

Image non disponible Lancez la démonstration (Splash screen avec ombre)

Image non disponible 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. Ça m'a pris des années, mais finalement 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, mais 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.

Image non disponible

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 ses propriétés. :)

Image non disponible

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 :

Image non disponible

Voici le code source de ce nouveau composant :

 
Sélectionnez
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;
    }
}

IV. Téléchargements

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

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 œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 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'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.