Le Fondu c’est hype, c’est un fait ! Cela dit comment faire ce genre de choses
en Java/Swing ?
Le moyen le plus simple que j’ai trouvé (il-y-en a surement d’autres) c’est
d’utiliser AWTUtilities (pour gérer la transparence) et un Timer (pour gérer
la disparition graduelle).
Prenons pour exemple d’un JDialog que l’on va estomper jusqu’à sa disparition
complète. C’est la définition du SlashScreen.
Java est orienté objet, autant en profiter et créer une classe dédiée au fade-
out :
12345678910111213141516171819
importjava.util.TimerTask;importjavax.swing.JDialog;importcom.sun.awt.AWTUtilities;publicclassFaderextendsTimerTask{privateJDialogjDialog;publicFader(JDialogjDialog){this.jDialog=jDialog;}//Comme Fader étend de Timer, c'est la méthode run() qui permet de faire le traitement@Overridepublicvoidrun(){//On décide de réduire l'opacité du JDialog par 0,01f (car c'est du float)//Bien entendu si l'opacité est réduite au maximum, on ferme le JDialog avec dispose()if(AWTUtilities.getWindowOpacity(jDialog)>0.01f){AWTUtilities.setWindowOpacity(jDialog,AWTUtilities.getWindowOpacity(jDialog)-0.01f);}else{jDialog.dispose();}}}
Et la classe qui contient notre JDialog à faire disparaître :
importjava.awt.Font;importjava.awt.GridLayout;importjava.util.Timer;importjavax.swing.JDialog;importjavax.swing.JLabel;importjavax.swing.JPanel;publicclassSplashextendsJDialog{publicSplash(){//On place le JDialog au centre de l'écransetLocationRelativeTo(null);//On désactive la barre de titre setUndecorated(true);//On est organisés alors on place tout les les éléments voulus dans un panel//On choisit un GridLayout de 1 ligne sur 1 colonne, on se complique pas pour l'exemple !JPanelmain=newJPanel(newGridLayout(1,1));JLabellabel=newJLabel("Hello Kitty !");//On écrit GROS, pour que ça se voit de loin !label.setFont(newFont("Arial",Font.BOLD,20));this.add(main);main.add(label);this.setVisible(true);pack();//On crée notre Timer Timer timer = new Timer();//Et on lance le fade-out, on attend 500 ms avant de commencer à estomper//Puis on estompe un peu plus toutes les 5mstimer.schedule(newFader(this),500,5);}}
Pour tester ce code vous pouvez
utiliser un appel de ce style :