Faire un splash screen en swing

Voici une classe qui peux vous etre utilile si vous désirez afficher un splash screen ( écran de démarrage ) en swing.


Cette classe prend en parametres le nom du fichier image que vous voulez afficher, la frame qui va s'afficher, et le temps jusqu'a ce quelle soit rendue invisble.
Deux thread sont lancé :
  • un qui attend le temps voulu pour l'affichage du splash screen, puis qui lance le second thread
  • l'autre qui rend invisible la frame


package main; 
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JWindow;
import javax.swing.SwingUtilities;
@SuppressWarnings("serial") class SplashWindow extends JWindow {


public SplashWindow(String filename, Frame f, int waitTime) {
super(f);
//cree un label avec notre image
JLabel l = new JLabel(new ImageIcon(filename));
//ajoute le label au panel
getContentPane().add(l, BorderLayout.CENTER);
pack();

//centre le splash screen
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension labelSize = l.getPreferredSize();
setLocation(screenSize.width / 2 - (labelSize.width / 2),
screenSize.height / 2 - (labelSize.height / 2));

//rend le splash screen invisible lorsque l'on clique dessus
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
setVisible(false);
dispose();
}
});

//afin d'acceder à la valeur WaitTime
final int pause = waitTime;

//thread pour fermer le splash screen
final Runnable closerRunner = new Runnable() {
public void run() {
setVisible(false);
dispose();
}
};


Runnable waitRunner = new Runnable() {
public void run() {
try {
Thread.sleep(pause);
//lance le thread qui ferme le splash screen
SwingUtilities.invokeAndWait(closerRunner);
} catch (Exception e) {
e.printStackTrace();
}
}
};

//affiche le splash screen
setVisible(true);

//lance le thread qui ferme le splash screen apres un certain temps
Thread splashThread = new Thread(waitRunner, "SplashThread");
splashThread.start();
}
}

Laboratoire SUPINFO des technologies Sun
labo-sun@supinfo.com


Conditions d'utilisation et © Copyright 2000-2006 SUPINFO Paris, Paris Academy of Computer Science
23, rue de Château Landon - 75010 PARIS - Tél : +33 (0) 153359700 Fax : +33 (0) 153359701
Respect de la vie privée