Creare uno splash screen in Java
Java mette a disposizione la classe SplashScreen per creare degli splash screen per le nostre applicazioni.
A mio modo di vedere però sono poco flessibili e si possono ottenere cose migliori usando un JWindow.
Io per creare il mio splash ho usato una JWindow temporizzato; così facendo posso impostare qualsiasi aspetto della finestra.
Inoltre con la classe Timer possiamo decidere per quanto visualizzare la finestra.
State attenti che stiamo parlando di javax.swing.Timer.
La JWindow è questa qua:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JWindow;
public class SplashScreen extends JWindow {
public void showSplashAndExit() {
JPanel content = (JPanel) getContentPane();
content.setOpaque(false);
setSize(700, 90);
setLocationRelativeTo(null);
JLabel label = new JLabel(new ImageIcon("splash.jpg"));
content.add(label, BorderLayout.CENTER);
setVisible(true);
Timer timer = new Timer(3000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
timer.start();
}
}
La composizione della finestra è molto semplice; c'è JPanel e dentro una JLabel che ha come sfondo l'immagine di splash.
Poi ho impostato un Timer da 3000 ms (3 secondi); al termine dei 3 secondi la finestra si chiude.
A questo punto abbiamo due possibilità:
- il programma avvia la JWindow e al termine dei 3 avvia la finestra principale del programma
- la finestra principale del programma avvia la JWindow prima di avviare i propri componenti
La seconda opzione è una cosa del genere; metodo main del JFrame principale:
public static void main(String args[]) {
SplashScreen ss = new SplashScreen();
ss.showSplashAndExit();
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(FormMain.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(FormMain.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(FormMain.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(FormMain.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new FormMain().setVisible(true);
}
});
}
La scelta sta a voi!
java splashscreen jwindow timer jframe jpanel
Commentami!