Splash screen avec progress Bar

Vous avez pu voir comment afficher un splash screen a l'aide de swing ( lors de l'exemple de code suivant )
Mais cette méthode peux etre assez contraignante si vous ne savez pas combien de temps dure le chargement de votre application.

Voici donc une façon amélioré d'afficher un Splash screen.
Nous avons ajouté par rapport à la premiere methode une progressBar (barre de progression) en bas de notre Frame.
A chaque fois que nous avons passé une etape de chargement on doit donc specifier à cette progress bar d'avancer grace à la methode setProgressValue.
Une fois que la valeur maximum de cette progress bar est atteinte, le splash screen se ferme grace au thread.

Notons également que le constructeur ne prend plus la durée d'affichage mais la valeur de la progressBar à laquelle le splash screen ne doit plus être affiché
 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 java.lang.reflect.InvocationTargetException;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.JWindow;
import javax.swing.SwingUtilities;
@SuppressWarnings("serial")
public class SplashWindow extends JWindow {
private JProgressBar progressBar = null;
private int maxValue = 0;



public SplashWindow(String filename, Frame f, int intProgressMaxValue) {
super(f);

//initialise la valeur a laquelle le splash screen doit etre fermé
this.maxValue = intProgressMaxValue;


//ajoute la progress bar
progressBar = new JProgressBar(0, intProgressMaxValue);
getContentPane().add(progressBar, BorderLayout.SOUTH);


// cree un label avec notre image
JLabel image = new JLabel(new ImageIcon(filename));
// ajoute le label au panel
getContentPane().add(image, BorderLayout.CENTER);
pack();
// centre le splash screen
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension labelSize = image.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();
}
});
// affiche le splash screen
setVisible(true);
}


//change la valeur de la progress bar
public void setProgressValue(int value) {
progressBar.setValue(value);
//si est arrivé a la valeur max : ferme le splash screen en lancant le thread
if (value >= maxValue) {
try {
SwingUtilities.invokeAndWait(closerRunner);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}

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

Voici un exemple de comment appeler le splash screen créé

package main;

import java.awt.Frame;

public class Launch {

public static void main(String[] args) {

//notre image qui sera dans notre splash screen
String imgName = "D:\\TIPI.jpg";

//affichage du splash screen
SplashWindow splashWindow1 = new SplashWindow( imgName, new Frame(),10);

//etape 1 ( avec une duree de 2 )
splashWindow1.setProgressValue(3);
//etape 2
splashWindow1.setProgressValue(5);
//etape 3
splashWindow1.setProgressValue(7);
//etape 4
splashWindow1.setProgressValue(10);
}

}

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