Home / Programmazione / Java / Creare uno splash screen in Java
Mattepuffo

Creare uno splash screen in Java

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!